android开发艺术探索 第一章 启动模式解析

1.启动模式有四种:standard、singleTop、singleTask、singleInstance。

2.standard:默认模式,同栈先进后出原则。

3.singleTop:栈顶复用模式,启动的activity在栈顶则不会创建新的activity,并且调用onNewIntent方法(注意:onPause和onResume还会被调用);反之,则会创建activity,并且正常调用onCreate和onStart方法。

4.singleTask:栈内复用模式,启动的activity所需要的栈内如果有此activity,则此activity上面的所有其他activity出栈,此activity复用,调用onNewIntent方法。启动的activity所需要的栈内如果无此activity,则创建activity并压入栈内,并正常调用onCreate和onStart方法。

5.singleInstance:特殊的singleTask,如果activity是singleInstance并且启动它,会为它单独开辟一个栈放此activity,根据栈内复用性,以后不会在创建新的此activity,除非这个独特的任务栈被系统销毁。

6.singleTask中说的activity所需要的栈就是TaskAffinity:TaskAffinity是任务栈名称,在activity的参数配置中可以设置,不设置则是默认包名(也可能受前面的启动模式影响),都一样。

7.singleTask细节解析:

①栈内复用:设置activity B为singleTask,如果B所需要的栈(即TaskAffinity)中没有则创建B,反之则将任务栈中B上面的activity出栈并复用栈中的B。

②与singleTask栈一致:设置B为singleTask启动C,则activity c会放入B所在的任务栈中。

8.singleInstance细节解析:

①全局唯一性:即整个系统中只存在一个这样的实例。

②独占性:独占一个任务栈。

③被singleInstance设置的activity B启动其他的activity C可以开启一个新的任务栈,但不一定开启(看这个activity C 有没有设置TaskAffinity)

注意:当用application的context启动activity时必须制定模式为singleTask,不然会出现启动当前activity没有对应的栈,因为application的context没有对应的栈。

猜你喜欢

转载自blog.csdn.net/gongjdde/article/details/88807881