Activity启动方式的总结(1)
2016-07-03 14:46
549 查看
下雨下的好糟糕,有时候真TM孤单,最近飞蚊症加重了,心态好爆炸.
1.所谓栈:限制了里面的内容只能pop或者push。
2.任务栈是用来提升用户体验而设计的,它是一些Activity的组合,为了让用户完成一些工作或操作:
默认情况下,一个Activity启动另一个Activity(包括其他应用中的Activity)时,两个Activity是放置在同一个task中的,后者被压入前者所在的task栈,当用户按下后退键,后者从task被弹出,前者又显示在幕前。
如果一个任务栈被移动到了后台,任务栈中的Activity都处于暂停状态。并且会保留每一个activity的状态,不丢失它们状态信息。
安卓系统是实时多task系统,用户可以随意在多个task之间切换。当一个task的栈内所有activity都pop之后,task也就销毁了。有时系统为了回收内存,会销毁activity,但是task不会销毁。
关键词–
1.TaskAffinity对于Activity来说就好像它的身份证一样,可以告诉所在的task,自己属于这个task中的一员;
2.拥有相同affinity的多个Activity理论同属于一个task.
3.task自身的affinity决定于根Activity的affinity值。
4.默认情况下,一个应用内的所有Activity都具有相同的affinity,都是从Application(参考的taskAffinity属性)继承而来,而Application默认的affinity是中的包名,我们也可以为设置taskAffinity属性值。
5.我们可以为每个Activity单独设定TaskAffinity,但是这个属性值不能和应用所在的包名相同,因为默认就是应用的package name。(-.-!)
1.singleTask或者FLAG_ACTIVITY_NEW_TASK标记,
2.allowTaskReparenting属性配合工作(重新为Activity选择宿主task)
根据affinity查找或创建一个新的具有对应 该启动模式Activity的affinity的task。
如果TaskAffinity和allowTaskReparenting配合使用:
参考:
http://blog.piasy.com/2016/03/19/Android-Task-And-Back-Stack/?utm_source=tuicool&utm_medium=referral
http://www.cnblogs.com/CSU-PL/p/3794280.html
任务栈
首先先了解一下任务栈是什么东西。1.所谓栈:限制了里面的内容只能pop或者push。
2.任务栈是用来提升用户体验而设计的,它是一些Activity的组合,为了让用户完成一些工作或操作:
什么时候创建Task?
启动一个应用,系统就会为之创建一个task,来放置根Activity;Activity所需的任务栈的名字是什么?
默认情况下,所有Activity所需的任务栈的名字为应用的package name
栈内的Activity都是同一个进程的吗?
栈内的activity可以来自不同的app,因此可以是运行在不同的进程,但是它们都属于同一个task内。默认情况下,一个Activity启动另一个Activity(包括其他应用中的Activity)时,两个Activity是放置在同一个task中的,后者被压入前者所在的task栈,当用户按下后退键,后者从task被弹出,前者又显示在幕前。
任务栈的分类:
任务栈分为:前台任务栈和后台任务栈。如果一个任务栈被移动到了后台,任务栈中的Activity都处于暂停状态。并且会保留每一个activity的状态,不丢失它们状态信息。
安卓系统是实时多task系统,用户可以随意在多个task之间切换。当一个task的栈内所有activity都pop之后,task也就销毁了。有时系统为了回收内存,会销毁activity,但是task不会销毁。
关键词–TaskAffinity
1.TaskAffinity对于Activity来说就好像它的身份证一样,可以告诉所在的task,自己属于这个task中的一员;2.拥有相同affinity的多个Activity理论同属于一个task.
3.task自身的affinity决定于根Activity的affinity值。
4.默认情况下,一个应用内的所有Activity都具有相同的affinity,都是从Application(参考的taskAffinity属性)继承而来,而Application默认的affinity是中的包名,我们也可以为设置taskAffinity属性值。
<application android:name="Browser" android:label="@string/application_name" android:taskAffinity="android.task.browser" >
5.我们可以为每个Activity单独设定TaskAffinity,但是这个属性值不能和应用所在的包名相同,因为默认就是应用的package name。(-.-!)
affinity在什么场合应用呢?
TaskAffinity主要和:1.singleTask或者FLAG_ACTIVITY_NEW_TASK标记,
2.allowTaskReparenting属性配合工作(重新为Activity选择宿主task)
两种场景的区别:
如果TaskAffinity和singleTask配合使用:根据affinity查找或创建一个新的具有对应 该启动模式Activity的affinity的task。
如果TaskAffinity和allowTaskReparenting配合使用:
忘了一点:怎么看栈的情况:
adb shell dumpsys activity参考:
http://blog.piasy.com/2016/03/19/Android-Task-And-Back-Stack/?utm_source=tuicool&utm_medium=referral
http://www.cnblogs.com/CSU-PL/p/3794280.html
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories