1.任务栈
简单理解一下任务栈,以后笔记再重点学习。
1.栈里面可以存放好多好多好多的Activity, 从栈顶到栈底,后进先出。
2.一般每个进程维护一个任务栈(当然也有例外)
3.栈里没有Activity的时候会被回收掉
4.Activity 的任务栈名默认为包名,当然也可以mainfest里面设置一个栈名存放
2.Activity的4种启动模式: standard,singleTop,singleTask,singleInstance
(1).standard:
系统默认模式。每次都会创建一个新的实例
如果一直启动standard 模式的Activity A,那么栈里面将会是 AAAAAAAAA....
(2).singleTop:
栈顶利用模式。 栈里只可能有一个实例,不会重复
栈内 ABCD - 如果启动D,D不会创建(也不会调用onCreate,onStart方法),但是会调用 onNewIntent() 方法(此方法可取出当前请求的信息)
栈内 ADBC - 如果启动D,D会重新创建(onCreate,onStart) --> 栈里变成ADBCD
(3).singleTask:
栈内利用模式。 栈里无时,创建之。栈里有时,不创建,把上面的Activity全部杀掉
栈内ABCD - 如果启动D,D不会创建(也不会调用onCreate,onStart方法),但是会调用 onNewIntent() 方法(此方法可取出当前请求的信息)
栈内 ADBC - 如果启动D,D会重新创建(onCreate,onStart) --> 栈里变成 AD
(4).singleInstance:
单实例模式。
具有这个模式的Activity,只能单独位于一个任务栈中。
3.给Activity指定启动模式
(1)Mainfest 里面指定
(2)Intent中设置标志位来指定
这两种方法都可以指定,但是有区别如下:
1.优先级: 第二种优先级更高,如果两个同时写,以二为准。
2.一无法设定FLAG_ACTIVITY_CLEAR_TOP,二无法指定 singleInstance模式。
4.一个方便理解的小例子
1.包名为“任务栈1”,ABC三个Activity。 A为mainActivity,standard 启动模式;B和C是singleTask模式,taskAffinity为 “任务栈2”
2.A启动B(A在默认的栈1中,启动B时,因为没有栈2,所以创建栈2再把B放进去。栈1进入后台)
3.B启动C(因为栈2已经存在,直接将C放在顶端)
4.C启动A(A为standard模式,哪个任务栈启动它,它就放在哪个任务栈中)
5.A启动B(B是singleTask模式,所以栈2中的CA被杀掉,B在顶端)
6.按BACK键(B出栈,栈2空了,只能回到后台栈1)
7.再按BACK键 --> 回到桌面咯