1.Activity的生命周期和启动模式

1.生命周期

1.Activity的生命周期和启动模式_第1张图片
Paste_Image.png
  1. onCreate:正在被创建,通常初始化布局,准备数据。
  2. onRestart:正在被重新启动,不可见->可见,通常是用户行为(点击home等)
  3. onStart: 已经显示,但无法交互,还在后台。
  4. onResume:已经显示,已经显示到前台。
  5. onPause:当Activity要跳到另一个Activity或应用正常退出时都会执行这个方法。此时Activity在前台并可见,我们可以进行一些轻量级的存储数据和去初始化的工作,不能太耗时,因为在跳转Activity时只有当一个Activity执行完了onPause方法后另一个Activity才会启动,如果onPause在500ms即0.5秒内没有执行完毕,强制关闭Activity。
  6. onStop:即将停止,已经不可见,可做轻量级回收。
  7. onDestroy: 表示被销毁,可以做回收和资源释放。
几种情况:
  1. 打开新的Activity或切换桌面:onPause->onStop
  2. 返回Activity: onRestart->onStart->onResume
  3. 启动新的Activity:先调用旧的onPause,然后启动新的页面
  4. 切换屏幕:onSaveInstanceState->onCreate->onRestoreInstanceState,onPause,onStop,onDestroy也会被调用。恢复的数据从onCreate和onRestoreInstanceState的bundle去找,onCreate的bundle判断是否为空,系统自动还原某些数据,比如text。
  5. Activitiy的优先级:高->低
    (1)前台Activity
    (2)被dialog挡住的无法交互的前台
    (3)后台Activity
  6. 不想让Activity重新创建,设置android:configChanges=''orientation|ScreenSize''

2.启动模式

1. standard:标准模式

普通的stack结构,A->B会将B放入A所在的栈。如果用ApplicationContext启动会报错,因为ApplicationContext没有所谓的任务栈。解决方法:改为singleTask模式。

2. singleTop:栈顶复用。如果在栈顶,那么将不会重新创建。

栈:ABCD,启动D,还是ABCD,如果是standard,则变为ABCDD。

3. singleTask:栈内复用。

描述:启动A,如果存在A所需任务栈,如果不存在,创建任务栈并把A放入。如果存在,A在栈中,则把A调用到栈顶(clearTop),如果不存在A则,把A放到栈顶。

举例:

  1. S1:ABC,D需要S2,则S1:ABC,S2:D
  2. S1:ABC,D需要S1,则S1:ABCD
  3. S1:ADBC,D需要S1,则S1:AD(clearTop)
4. singelnstance

每个创建都位于单独栈,如果重复创建,则栈内复用,除非栈被销毁。属于加强的singleTask。

指定启动模式的方法:

  1. 通过androidManifest.xml指定:

2.通过Intent

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

区别:
(1) 优先级:1<2 。同时存在,以第二种为准。
(2)限定范围:1不能指定FLAG_ACTIVITY_CLEAR_TOP 2.无法指定singleInstance

你可能感兴趣的:(1.Activity的生命周期和启动模式)