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

无简介

显式启动

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

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声明如下:

就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中是如下代码的话

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

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 [dl href=‘http://pan.baidu.com/s/14SSWI’]测试代码下载[/dl]

-------------本文结束  感谢您的阅读-------------
下次一定