之前整理过的Activity有点乱,在补充一些!
Activity的生命周期图:
1)onCreate:在这个方法中可以做一些初始化工作,如调用setContentView去加载界面布局和资源,初始化Activity所需的数据;
2)onRestart:重新启动Activity;
3)onSart:活动由不可见变为可见时调用;
4)onResume:出现在前台并开始活动;
5)onPause:在系统准备去启动或恢复另一个活动的时候调用;
6)onStop:在活动完全不可见的时候调用;
7)onDestroy:在活动销毁之前被调用;
PS:
1)onStart和onResume都表示Activity已经可见,但Onstart的时候Activity还在后台,onResume的时候Activity才显示到前台;
2)onStart和onStop是从Activity是否可见这个角度来回调的,onResume和onPause是从Activity是否位于前台这个角度来回调的;
3)旧的Activity先onPause,新的Activity在启动,因此不能在onPause中做重量级的操作;
典型情况下的生命周期分析:
onCreate----->(onRestart)------>onStart------->onResume------->onPause------->onStop------>onDestroy
异常情况下的生命周期分析:
1)横竖屏切换的生命周期
onPause---->onSaveInstanceState--->onStop---->onDestroy---->onCreate--->onStart---->onRestoreInstanceState--->onResume
Ps:可以通过在AndroidManifest文件的Activity中指定如下属性:
Android:configChanges=“orientation|screenSize”来避免横竖屏切换时,Activity的销毁和重建,而是回调了onConfigurationChanged方法。
四种启动模式的应用场景:
stardard(标准模式):每启动一次Activity,就会创建一个新的Activity实例并置于栈顶。
应用:绝大多数的Activity
singleTop(栈顶复用模式):如果需要新建的Activity位于任务栈栈顶,那么此Activity的实例就不会重建,而是重用栈顶的实例。并回调onNewIntent方法。
应用: 在通知栏点击收到的通知,然后需要启动一个Activity,这个Activity就可以用singleTop,否则每次点击都会新建一个Activity。
singleTask(栈内复用模式):该模式是一种单例模式,即一个栈内只有一个该Activity实例。
应用:大多数App的主页
singleInstance(单例模式):打开该Activity时,直接创建一个新的任务栈,并创建该Activity实例放入新栈中。一旦该模式的Activity实例已经存在于某个栈中,任何应用再激活该Activity时都会重用该栈中的实例。
应用:呼叫来电界面(???)
Activity的Flags
ps: 通过Intent的addFlags()方法设置
1)FLAG_ACTIVITY_NEW_TASK:singleTask模式
2 ) FLAG_ACTIVITY_SINGLE_TOP:singleTop模式
3 ) FLAG_ACTIVITY_CLEAR_TOP:具有此标记位的Activity,当它启动时,在同一个任务栈中所有位于它上面的Activity都要出栈。如果和singleTask模式一起出现,若被启动的Activity已经存在栈中,则清除其之上的Activity,并调用该Activity的onNewIntent方法。如果被启动的Activity采用standard模式,那么该Activity连同之上的所有Activity出栈,然后创建新的Activity实例并压入栈中。
+