Android 启动模式:standard、singleTask、singleTop、singleInstance。
这4种启动模式是怎么实现的呢?
AMS :activity manager service
ActivityManagerService.java, android系统服务,Activity管理的服务端,用于管理activity的各种行为,控制activity的生命周期,派发消息事件,低内存管理等等。实现了IBinder接口,可以用于进程间通信。
AMS 中两个重要的类: ActivityTask、ActivityStack
ActivityStack负责管理 ActivityTask。
AcitivyTask 负责存放Activity对象。
总结: singleTask、singleinstance Google不建议使用因为会让用户的页面路径出现紊乱。
对这两个类的作用了解后,我们就很容易理解模式是怎么回事了。
1、standard(默认的标准的)
不指定task context.startActivity后会将new 的目标Activity放入默认task。
但是如果Task不存在呢?
这种情况类似于 launch main 会由 AMS找一个可用的task放入。
2、singleTop
基本情况和 standard一致。只有在一种情况下有区别,就是当 目标Activity在task栈顶的时候不会调用oncrate而是调用onNewIntent 方法。
例如 : A->B->C->D
如果将要打开的Activity 是D的话 task的结果是 A->B->C->D
如果不是D而是 C的话结果就是 A->B->C->D->C
3、singleTask()
task单例,启用此模式后会找一个新的Task来存放该Activity。
如果该Activity 已经存在 将此Activity上面的所有Activity 销毁。
例如 :B是singleTask 现在的Task是 : A->B->C
此时调用A结果将会变为 : A->B C将会被销毁
如果此时的栈为 A->C 打开B 结果将是 A->C 、 B(独立的task)
4、singleInstance
整个Android单例 该模式和singleTask 相似,唯一的区别是 Task独占。
比如:
1、 A为singleTask, A打开B Activity
结果 : A->B
2、A位singleInstance,A打开B Activity
结果 : A 、 B