Activity 初探 2——Activity 的启动方式 – 热爱改变生活
我的GitHub GitHub |     登录
  • If you can't fly, then run; if you can't run, then walk; if you can't walk, then crawl
  • but whatever you do, you have to keep moving forward。
  • “你骗得了我有什么用,这是你自己的人生”
  • 曾有伤心之地,入梦如听 此歌

Activity 初探 2——Activity 的启动方式

Android sinvader 3283℃ 0评论

显式启动

第一种,也是我们在开发中最为常用的:

Intent intent = new Intent(MainActivity.this, ThirdActivity.class);
startActivity(intent);

第二种,不是很常用 (点击进入原地址):

ComponentName cn=new ComponentName("com.example.appreceiver", "com.example.appreceiver.MainActivity");
    Intent intent = new Intent();  
   intent.setComponent(cn);

隐式启动

隐式启动 Activity 的 intent 到底发给哪个 activity,需要进行三个匹配,一个是 action,一个是 category,一个是 data。

1. 在 Manifest 中如果有 data, 那么在 intent 中,必须使用 setData 方法

假设在 Manifest 中一个 Activity 声明如下:

<activity android:name="cn.sumile.FourthActivity" >
 <intent -filter>
 <action android:name="www.sumile.cn"></action>
 <data android:scheme="sumile"></data>
 </intent>
 </activity>

就 data 节点来说,我们调用的时候必须有下面这一句:

intent.setData(uri);

而 uri 来自于下面的代码,里面的参数比 Manifest 中的只能多不能少

Uri uri=Uri.parse("sumile:haha");//这个可以
//Uri uri=Uri.parse("sumile");//这个不行
//Uri uri=Uri.parse("sumil");//这个不行

2. 关于 category

在 new Intent 之后,intent 中默认已经调用了

intent.addCategory(Intent.CATEGORY_APP_BROWSER);

所以如果 Manifest 中是如下代码的话

<activity android:name="cn.sumile.FourthActivity" >
 <intent-filter>
 <action android:name="www.sumile.cn" />
 <category android:name="android.intent.category.DEFAULT" />
 </intent-filter>
 </activity>

在 intent 中不用调用 addCategory 方法也可以。同时,如果 Manifest 中包括两个或多个 category 节点,那么 intent 中只要包括其中的一个就可以了,即如果 Manifest 在上面的基础上再添加

<category android:name="android.intent.category.APP_BROWSER" />

intent 还是不用调用 addCategory 方法,应为它默认已经包括了

intent.addCategory(Intent.CATEGORY_DEFAULT);

3. 有 data 的情况下,data 必须有,action 任意

假设 Manifest 中 data 节点,action 节点都有的话,那么 intent 的 setAction 方法和 setData 方法可以都有,也可以单独有 setData。


总结:

1. 如果 Manifest 中要有 data 节点,必须有 action 节点。
2. 在有 action 和 data 节点的时候,intent 中必须调用 setData 方法,调用不调用 setCategory 方法随意。
3.Manifest 中 category 节点的个数随意,但是 intent 中必须包含有 Manifest 中定义的节点中的一个(intent 中默认包含 default)。
4.action 节点可以包括多个,只要匹配到其中一个就可以打开,但是如果有其他的 Activity 也包括相同的 action 值,程序错误。
5. 最后调用的 setAction 的值,成为要去 Manifest 中匹配的值(这句好像是废话)

Activity 初步讲解请看:Activity 初探 1

测试代码下载
¥ 有帮助么?打赏一下~

转载请注明:热爱改变生活.cn » Activity 初探 2——Activity 的启动方式


本博客只要没有注明“转”,那么均为原创。 转载请注明链接:sumile.cn » Activity 初探 2——Activity 的启动方式

喜欢 (3)
发表我的评论
取消评论
表情

如需邮件形式接收回复,请注册登录

Hi,你需要填写昵称和邮箱~

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址