Android Task详解
什么是task
简单说task就是一些相关联的activity的集合,但activity之间不一定非得相关联。当我们按home键旁边那个方形键(recent-apps)时,屏幕上展示的就是一个个task。
task affinity
在manifest文件中,注册activity时如果不申明taskaffinity属性,默认就是app程序默认package名。默认情况下一个app中所有的activity都在一个task中。
<activity
android:taskAffinity=""
..
/>
默认情况下的affinity是app的包名
<manifest package="com.example"...>
launch modes
用来指示android系统用怎样的方式来启动activity
有俩种方式来定义launchMode:
在manifest中定义
使用Intent Flags
在manifest文件中定义
<activity android:launchMode = [“standard” | “singleTop” | “singleTask” | “singleInstance”] ../>
standard
默认的启动模式,入栈出栈操作。每一次创建一个新的activity
singletop
和standard和相似,但是有一点不同–系统会检查task栈,查看要启动的activity是否在栈顶,如果要启动的activity在栈顶,那么系统不会新创建要启动activity的实例,而是调用要启动activity的onNewIntent()方法
singleTask
当一个activity注册时,必须要定义taskAffinity值,不然就算launchMode为singleTask,它被启动时,仍然不会新建一个task,而是在以前的task中启动。
我们能在该activity所处的栈中push其他activity的实例和其它task栈
singleInstance
和singleTask很相似,只有一个细微的差别—当一个activity的启动模式被定义为singleInstance时,在该activity所处的task栈中,不能push其他activity实例,也不能push其它task栈
当我们根据launchMOde启动一个activity时,android系统会查看taskAffinity的值。查看root activity是否有一样的taskAffinity值,如果taskAffnity值一样的,那么该activity被压入root Activity所在的task栈,如果不是,那么该activity就会压入一个全新的task栈。
使用intent flags来启动
FLAG_ACTIVITY_NEW_TASK 同launchMode中的singleTask
FLAG_ACTIVITY_SINGLE_TOP singleTop
FLAG_ACTIVITY_CLEAR_TOP 分俩种情况
1)所有的activity都在一个task中
这个flag会让系统清除要启动activity之上的activity,并让要启动的activity回到前台
2)activities在不同的task中
包含要启动的activity的task会被系统带回前台,并将要启动activity之上的activities清除。
相关文章
- [Android]Android Activity 启动模式详解
- 【Android】 Android中ListView使用详解
- [Android Pro] 内容提供者ContentProvider的基本使用
- 【北京站】详解Visual Studio 2013:开发iOS及android应用!现场图集
- Android MVP 详解
- Android自定义属性,format详解
- Android Animations动画使用详解
- Android WebView详解
- android 多个shortCut快捷方式实现以及对58同城快捷方式的实现思路的研究
- Android自定义属性,format详解
- android配置文件详解
- Android------自定义ListView详解
- C代码编译成在android上的可执行程序
- Android 长按Button出现一个菜单
- Android 在Activity界面下滑动ViewPager实现两个Fragment之间的切换?
- Android 退出登陆后,清空之前所有的activity,进入登陆主界面
- Android点击按键改变按键背景图片-选择器
- Android Studio 1、改包名,2、改项目名,3、类中的所有同一个变量名/文件名统一改
- Android TV-电视开发常用知识点讲解
- Android adb常用命令详解
- Android OverScroller详解
- Android handler详解
- Android Studio中自己定义快捷输入块
- android uiautomator自己主动化測试
- Android之 震动(Vibrator)如何贯通Android系统 (从硬件设计 --> 驱动 --> HAL --> JNI --> Framework --> Application)
- Android对话框_详解
- Android使用SVG矢量创建很酷的动态效率!