Android-Activity的生命周期与启动模式

四个状态:

android是使用Task来管理活动的,用栈来存放活动的

  • 运行状态:当活动处于栈顶时

  • 暂停状态:活动不在栈顶,但仍可见(比如提示框的弹出)

  • 停止状态:不在栈顶,并且不可见

  • 销毁状态:从栈中移除

活动的生命周期

  1. onCreate:活动第一次被创建时调用,表示活动正在被创建
  2. onStart:活动由不可见变为可见,但是活动还没有在前台
  3. onResume:活动处于栈顶,可与用户交互,出现在前台
  4. onPause:准备启动或者恢复另一个活动,正常情况下紧接着调用onStop
  5. onStop:活动完全不可见,表示活动即将停止
  6. onDestroy:活动被销毁之前调用
  7. onRestart:活动有停止状态变为运行状态,表示活动正在被重新启动

注意:当启动新的活动时,旧活动的onPause方法会先执行,然后才会启动新的活动

异常情况:

1.资源相关的系统配置发生改变导致Activity被杀死并重建

  • 当系统配置发生改变后,Activity会被销毁,由于是异常终止,所以系统会调用onSaveInstanceState方法来保存数据,它的调用时间是在onStop之前,与onPause没有规定谁先谁后
  • onSaveInstanceState将数据储存在Bundle对象中,然后传递给onCreate和onRestoreInstanceState方法,onRestoreInstanceState的调用时期是在onStart之前

2.资源内存不足导致低优先级的Activity被杀死

  • 前台Activity:正在与用户进行交互
  • 可见但非前台Activity,比如一个弹框的弹出
  • 后台Activity
    由优先级从上到下,优先级越低,则越容易被杀死

活动的生命期:

  • 完整期:onCreate~onDestroy
  • 可见期:onStart~onStop
  • 前台期:onResume~onPause

活动的启动模式

  • standard:标准模式,默认启动模式,不管活动栈是否出存在该活动,都会创建新的活动

  • singleTop:栈顶复用模式,只要在栈顶已经是该活动,就不会重新创建,但是没有在栈顶时依然会创建新的活动

  • singleTask:栈内复用模式,当A活动启动B活动时,目标栈是C1,如果B活动和C1栈都不存在,则先创建C1栈,然后创建B活动,将活动放进C1栈中;如果启动B活动,目标栈是C1,他们两者都存在,则在B活动上面的其他活动通通会被出栈

  • singleInstance:会单独一个返回站来管理该活动,不管哪个程序,都可以来访问该活动。

TaskAffinity:任务相关性,标志一个活动所需要任务栈的名字;
默认情况下,活动所需的任务栈的名字为应用的包名;
主要与singleTask和allowTaskReparenting属性配对使用。

  • 与singleTask结合:待启动的Activity会运行在名字和TaskAffinity相同的任务栈中

  • 与allowTaskReparenting结合:当A应用启动了B应用的某个Activity后,如果这个Activity的allowTaskReparenting为true时,当B应用启动后,则这个Activity会从A的任务栈转移到B的任务栈

    举例:有2个应用,A应用启动了B应用的c1活动,然后点击home键返回手机主界面,启动B应用,这时看到的是刚刚被启动的c1活动

Activity的Flags

  • FLAG_ACTIVITY_NEW_TASK:效果与在清单文件中指定为singleTask启动模式一样

  • FLAG_ACTIVITY_SINGLE_TOP:效果与在清单文件中指定为singleTop启动模式一样

  • FLAG_ACTIVITY_CLEAR_TOP:活动具有此标记位时,当启动该活动时,在它上面的其他活动通通出栈

  • FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS:具有这个标记位的活动,不会出现在Activity历史的列表中,当我们不希望返回还能看到该活动,则可以指定这个标记位

你可能感兴趣的:(Android)