android Activity 启动方法举例

首先对 android.intent.action.MAIN 以及android.intent.category.LAUNCHER做个说明

 一个应用程序可以有多个Activity,每个Activity是同级别的,那么在启动程序时,最先启动哪个Activity呢?有些程序可能需要显示在程序列表里,有些不需要。怎么定义呢?android.intent.action.MAIN决定应用程序最先启动的Activity android.intent.category.LAUNCHER决定应用程序是否显示在程序列表里

因为你的程序可能有很多个activity只要xml配置文件中有这么一个intent-filter,而且里面有这个launcher,那么这个activity就是点击程序时最先运行的那个activity。

 

Activity的启动方法分为explicit(明确)以及implicit(隐藏)

1.explicit:

   Activity的启动函数是 startActivity(Intent),explicit启动方式在构建Intent的时候,调用的是 Intent(Context,Class)的方式

   比如Intent intent= new Intent(this,newActivity.class);   其中的 newActivity是要启动的Activity的类名。

2.implicit:

   通过implicit方式来启动Activity的话需要进行3个数据的匹配,分别是  action、category以及data

   与action、category以及data想对应的信息分别为函数  setAction、addCategory以及Uri

   1). 如何指定action呢?

        通过<intent-filter>
                  <action android:name="XXXXX"/>
       <category android:name="android.intent.category.DEFAULT"/>
                  <category android:name="BBBBB"/>
                   当然,这里的action以及category可以添加多个.
             </intent-filter>

          通过 Intent intent = new Intent(); 
                 intent.setAction("XXXXX");
                 startActivity(intent);
                 来启动设置了action为XXXXX的Activity,也就是说,如果有多个Activity设置了<action android:name="XXXXX"/>,也是合法的,只是在启动的时候会让用户自行选择打开那个Activity。需要注意的是,通过implicit方法启动Activity一定要加上<category android:name="android.intent.category.DEFAULT"/>,否则会抛出异常。
                还可以通过addCategory来添加启动条件,比如上面的代码加入 intent.addCategory("BBBBB"); 那一定要这两个条件都符合的Activity才可以启动。

                需要注意的是,不通过setAction指定action,而只通过addCategory的条件来判断,是会抛出异常的。

 

      2)  对于data的说明  data有以下选项
            <data android:host="string" 
            android:mimeType="string" 
            android:path="string" 
              android:pathPattern="string" 
              android:pathPrefix="string" 
              android:port="string" 
        android:scheme="string" /> 

                Uri的格式为scheme://host:port/path or pathPrefix or pathPattern
             匹配的时候是需要从左到右的,也就是说如果scheme没有匹配的话,根本就不会去匹配后面的比如host等

             当我们在 <intent-filter> </intent-filter>  添加了 data之后,在代码里面还需要通过setAction来添加action才可以匹配,但是可以跳过addCategory,因为android默认为我们设置了一个 DEFAULT。
              如果再1)中添加如下代码 <data android:scheme="what"/> 那 需要添加的代码还有 Uri uri=Uri.parse("what://");  intent.setData(uri);

 

 

            总得来说,通过implicit的方式来启动Activity,需要匹配action、category以及data,只有3个全部正常匹配之后,才能启动Activity,否则将会抛出异常。(addCategory,因为android默认为我们设置了一个DEFAULT)

           关于Uri的更多用例,详见http://www.cnblogs.com/rollrock/archive/2012/02/24/2366891.html   http://www.aidsex.cn

             

posted on 2012-02-24 16:12  景树园  阅读(672)  评论(0编辑  收藏  举报

导航