Explicit intent 显示意图:
不传数据
startActivity(new Intent(this,EastActivity.class));
传数据
intent.putExtra(key,value) //以键值对的形式放入bundle集合中
@src Bunlde( A mapping from String keys to various {@link Parcelable} values.)
当然显示意图也是可以跨进程掉起别的app的activity,前提是你所调起的三方activity是需要暴露给外部应用的,即在AndroidManifest设置属性exported = "true",或者添加intent-filter<这个会默认开启exported的>,如果当期activity所在app没有存活,会开启新的进程。但是一般没人这么做,因为你暴露了别人的包名等相关隐私,再说,也没有人愿意给你。。。而且这样调起来,你会发现如果掉起三方app没有相关activity,这样的异常你只能去try catch了。
Intent intent = new Intent();
try {
//找不到会抛ActivtyNotFoundException
intent.setClassName("com.example.lx.listfragment", "com.example.lx.listfragment.WestsActivity");
// intent.setComponent(new ComponentName("com.example.lx.listfragment", "com.example.lx.listfragment.WestActivity"));
intent.putExtra("data", "I am comming from Explicit");
startActivity(intent);
}catch (ActivityNotFoundException e){
e.printStackTrace();
}
好了,成功了。
Implicit intent 隐示意图:
不指定activity的具体类名,通过action,category,data去筛选合适的activity去匹配,当然也可能会匹配到不止一个组件,满足当前intent筛选的条件这时候系统会弹出一个对话框让用户自己去选择。然后就是,楼主觉得需要注意的地方有三点,也有可能是比较容易被忽略的。。。
1.即使三方app不在后台,当前app也是可以调起来三方相关app组件的。
2.因为startAactivity中intent都会默认的绑定了一个category,当然一个intent也可以指定多个category(多个action),所以通过隐示启动的话,对应app中的AndroidManifest中intent-filter得去指定一个category,不然就匹配不到了.
3.为了避免找不到需要匹配activity的情况会抛出ActivityNotFoundException的异常,一般都是会通过intent.resolveActivity(getPackageManager()) != null 进行判空处理。
有问题,欢迎指正~