Android基础:Activity的生命周期和启动模式

Activity的生命周期分析

将Activity的生命周期分为两部分:android

一、典型状况下的生命周期

正常状况系,Activity会经历以下生命周期:学习

  1. onCreate:表示Activity正在被建立
  2. onRestart:表示Activity正在被从新启动
  3. onStart:表示Activity正在被启动,这时已经可见,但没有出如今前台没法进行交互
  4. onResume:表示Activity已经可见,而且处于前台
  5. onPause:表示Activity正在中止(可作一次保存状态中止动画等非耗时操做)
  6. onStop:表示Activity即将中止(可进行重量级回收工做)
  7. onDestroy:表示Activity即将被销毁

附加说明: 针对某一Activity:动画

  • 第一次启动:onCreate->onStart->onResume;
  • 打开新的Activity或者返回桌面:onPause->onStop。若是打开新的Activity为透明主题,则不会调用onStop;
  • 当回到原来Activity时:onRestart->onStart->onResume;
  • 当按下返回键:onPause->onStop->onDestroy

当从A启动B时: onPause(A)->onCreate(B)->onStart(B)->onResume(B)->onStop(A)code

二、异常状况下的生命周期

这里的异常状况主要分为两种:blog

资源相关的系统配置文件发生改变致使Activity被杀死并重建

例如横竖屏切换:当系统配置发生改变后生命周期

  • Activity就会被销毁(onPause->onStop->onDestroy依次调用);
  • 。因为是在异常状况下终止的,因此系统会调用onSaveInstanceState保存当前Activity状态。<u>onSaveInstanceState在onStop以前调用,跟onPasue没有时序关系</u>;
  • 当Activity被从新建立后,系统会调用onRestoreInstanceState(在onStart以前调用),并把onSaveInstanceState中保存的Bundle做为参数传递给onCreate和onRestoreInstanceState

正常状况下Activity不会调用onSaveInstanceState和onRestoreInstanceState,能够根据onRestoreInstanceState来判断Activity是否被重建。 Activity会为咱们自动作一些恢复工做,例如当前视图结构和数据(文本框用户输入数据,ListView滚动位置)内存

当Activity被异常销毁时,咱们能够在onSaveInstanceState保存一些数据,而后等Activity重建在onCreate里或者onRestoreInstanceState获取状态信息。两者的区别是:onCreate正常启动时,其参数Bundle可能为空,而onRestoreInstanceState一旦被调用,Bundle一定不为空。资源

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

Activity按照优先级大体分为三种:get

  1. 前台Activity:正在和用户交互的Activity,优先级最高;
  2. 可见但非前台(可见但不可交互):例如Activity中有弹窗,没法进行交互;
  3. 后台Activity:已经执行过onStop的Activity

当系统内存不足时,系统会按照上述优先级去杀死目标Activity,并经过后续的onSaveInstanceState和onRestoreInstanceState来存储和恢复数据。it

Activity的四种启动模式

  1. standard:标准模式,也是默认模式。每次启动都会建立一个全新的实例。
  2. singleTop:栈顶复用模式。这种模式下若是Activity位于栈顶,不会新建实例。onNewIntent会被调用,接收新的请求信息,不会再低啊用onCreate和onStart。
  3. singleTask:栈内复用模式。升级版singleTop,若是栈内有实例,则复用,并会将该实例之上的Activity所有清除。
  4. singleInstance:系统会为它建立一个单独的任务栈,而且这个实例独立运行在一个 task中,这个task只有这个实例,不容许有别的Activity 存在(能够理解为手机内只有一个)

指定启动模式的方法

在AndroidMenifest里指定启动模式

<activity android:name=".singletop.SingleTopActivity" android:launchMode="singleTop">

经过Intent中设置flag指定启动模式

intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TASK);

今年金九银十我花一个月的时间收录整理了一套知识体系,若是有想法深刻的系统化的去学习的,能够点击传送门,我会把我收录整理的资料都送给你们,帮助你们更快的进阶。

相关文章
相关标签/搜索