Activity的启动模式
-
启动模式:决定新生成的Activity实例是否重用已经存在的Activity实例,是否和其它Activity共用一个task:
-
Task: 一个具有栈结构的对象,一个Task中可以存放多个Activity,启动一个应用也就是创建一个与之对对应的task.
-
Activity启动模式分类:
-
-
singleTop: 如果某个Activity自己激活自己,即任务栈栈顶就是该Activity,则不需要创建,其余情况都需要创建新的Activity。
-
singleTask: 如果要激活的Activity在任务栈中存在该实例,则不需要创建,只需要把此Activity放入栈顶,并把该Activity以上的Activity实例都出栈。
-
singleInstance: 只有一个实例,并且该实例独立运行在一个task中,这个task只有这个实例,不允许有别的Activity存在。
-
-
如何设置Activity的启动模式---两种方式:
-
在Manifests当中对目标Activity配置启动模式。即设置LancheMode属性
-
通过设置IntenFlag设置Activity的启动模式:
-
相关概念:
-
Task : 一个具有栈结构的容器,一个task可以存放多个Activity实例
-
taskAffinity:task序号(每个task序号不同,不同的Activity可以存放在不同的task当中)
如果一个Activity没有明确指明其所处的task容器,则默认为当前Application指明的 taskAffinity,若当前Application也没有指明,则该Activity的taskAffinity 默认为当前Application所在的包名。
-
intentFlag属性常用值:
-
FLAG_ACTIVITY_NEW_TASK ------>singleInstance
-
FLAG_ACTIVITY_SINGLE_TOP ------>singleTop
-
FLAG_ACTIVITY_CLEAR_TOP ------>singleTask
-
FLAG_ACTIVITY_REORDERD_TO_FRONT ---如果栈里已经存在目标Activity,则将它拿到栈顶部,但原先在目标Activity之上的Activity不会被出栈。
-
-
-
-
Activity之间的数据传递方式
-
intent.putExtra() 将需要传递的数据直接通过意图传递
-
Bundle 将需要传递的数据存放在bundle当中,然后将bundle对象传递给intent对象
复杂数据的传递
-
把需要传递的类实现Serializable接口
-
把需要传递的类实现Parcelable,并重写相关方法
Activity数据的回传
Activity_01----->Activity_02------>Activity_01 过程
1.startActivityForResult(intent)
2.onActivityResult
(即只需要将Activity)
启动系统的Activity(隐式启动)
常用的系统Activity:(注意在Manifest中提前打开相应的权限)
-
拨打电话: intent.setAction(Intent.ACTION_CALL)
-
发送短信: intent.setAction(Intent.ACTION_SEND)
-
打开相机: intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE)
-