最近感觉技术遇到了瓶颈,同事推荐了任玉刚大神的《Android开发艺术探索》一书,同时在学习的过程中,准备用博客的形式记录下学习过程,方便以后查阅。
以下内容及后续本次学习系列博客源自《Android开发艺术探索》
一、Activity四种启动模式说明:
1. standard
标准模式,系统的默认启动模式,每次启动Activity都会重新创建一个实例。被创建的实例生命周期按照正常启动执行 onCreate(),onStart(),onResume()。同时,谁启动了这个新的Activity,这个Activity就启动到谁的任务栈中。
2. singleTop
栈顶复用模式,这种模式下,如果新的Activity已经位于任务栈的栈顶,那么不会重新创建实例,会调用onNewIntent()方法。如果不是位于栈顶,仍然会创建新的实例。
例如,任务栈中有ABCD四个Activity,A位于栈底,D位于栈顶,此时:
再次启动D,如果D启动模式为singleTop,则不会创建D的实例,任务栈中仍为ABCD
再次启动D,如果D启动模式为standard,会创建D的实例,任务栈中为ABCDD
再次启动C,如果C启动模式为singleTop,会创建C的实例,任务栈中为ABCDC
3. singleTask
栈内复用模式,只要一个Activity在一个栈内存在,那么多次启动此Activity都不会创建新实例,也会调用onNewIntent()方法。
如果任务栈内有ABC三个Activity,此时再次启动B,如果B的启动模式为singleTask,则会将B移至栈顶,同时调用onNewIntent()方法,并且singleTask启动模式具有clearTop效果,结果是任务栈中变为AB。
4. singleInstance
单实例模式,此模式除了具有singleTask的特性外,设置了此模式的Activity只能单独的位于一个任务栈中,如果A的启动模式为singleInstance,启动A时,系统会为它创建一个任务栈,后续启动A都不会再次创建实例。
二、给Activity设置启动模式的两种方式:
1. AndroidMenifest配置
<activity android:name=".MainActivity"
android:launchMode="singleTop">
</activity>
2. Intent设置
Intent intent = new Intent();
intent.setClass(MainActivity.this, SecondActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
第一次写博客还有点小紧张呢 @~@