Activity

1、生命周期

image.png

基本方法介绍:

方法 介绍
onCreate Activity创建,完成初始化操作
onRestart 当活动有停止状态变为运行状态时调用
onstart Activity可见,但是不能进行交互
onResume Activity有焦点,已经在前台活动
onPause Activity失去焦点,退出前台活动,可以做存储数据、停止动画等操作
onStop Activity不可见,可以做轻微重量级操作,如取消网络连接、注销广播接收器等
onDestrory Activity被销毁,做回收工作、资源释放
onNewIntent 已存在实例,回到栈顶位置,SingleTask、SingleTop、SingleInstance模式下都可能会调用,生命周期在onPause回到onPause之前、onStop回到onStart之间

可以看出Activity的完整生命周期是onCreate -> onStart -> onResume -> onPause -> onStop,onDestroy

2、Activity的四个状态

运行状态:当一个Activity位于返回栈的栈顶时,最不会被系统回收的状态

暂停状态:当一个Activity不再处理栈顶位置,但仍然可见,当Activity被另一个透明或者Dialog样式的Activity覆盖时都会导致前一个Activity处于Pause状态,系统不会轻易回收的状态,除非是(内存极低的情况回收可见活动造成极不好的用户体验)

停止状态:不在栈顶位置,且不可见。当内存低的时系统会回收

销毁状态:不在栈中,系统会自动回收

优先级顺序:运行状态>暂停状态>停止状态>销毁状态

3、启动模式

1 Standard模式

安卓默认启动模式,这种模式下Activity可以有多个实例,无论任务栈是否已经有这个实例,系统都会创建一个新的Activity实例

  • 启动A Acivity:onCreate-A -> onStart-A -> onResume-A
  • 从A 跳转B:onPause-A -> onCreate-B -> onStart-B -> onResume-B -> onStop-A
  • 从B回退到A:onPause-B -> onRestart-A -> onStart-A -> onResume-A -> onStop-B -> onDestroy-B (A启动A过程相同)
  • home或者锁屏:onPause-A -> onStop-A
  • home回到APP:onRestart-A -> onStart-A -> onResunme-A
  • 直接kill掉进程:没有任何回调

2 SingleTask模式(栈内复用模式)

同一个Task内只有一个实例,如果Activity已经位于栈顶,系统不会创建新的Activity实例,和singleTop模式一样。但Activity已经存在但不位于栈顶时,就会将该Activity移到栈顶,并将它上面的Activity出栈

使用场景:浏览器、程序入口点

在栈顶的情况:

A启动A:onPause -> onNewIntent -> onResume

不在栈顶的情况:

A->B,从B启动A:onPause-B -> onNewIntent-A -> onRestart-A -> onStart-A -> onResume-A -> onStop-B -> onDestroy-B

A->B->C,从C启动A:onDestroy-B -> onPause-C -> onNewIntent-A -> onRestart-A -> onStart-A -> onResume-A -> onStop-C- > onDestroy-C

3 SingleTop模式(栈顶复用模式)

SingleTop模式与Standard模式很相似,主要区别是如果在栈顶,再去启动它时,不会创建新的实例,如果不位于栈顶,就会创建新实例

使用场景:搜索结果页

在栈顶的情况下:

A启动A:onPause -> onNewIntent -> onResume

不在栈顶的情况:

A->B,从B启动A:onPause-B -> onCreate-A -> onStart-A -> onResume-A -> onStop-B

A->B->C,从C启动A:onPause-C -> onCreate-A -> onStart-A -> onResume-A -> onStop-C

4 SingleInstance模式(单例模式)

singleInstance模式也是单例的,但和singleTask不同,singleTask只是任务栈内单例,系统里是可以有多个singleTask Activity实例的,而singleInstance Activity在整个系统里只有一个实例,启动一singleInstanceActivity时,系统会创建一个新的任务栈,并且这个任务栈只有他一个Activity。

生命周期和SingleTop大体一样

SingleInstance模式并不常用,启动时会慢一些,切换效果不好,影响用户体验。

使用场景:闹铃的响铃页面

闹钟界面,你以前设置了一个闹铃:上午6点。在上午5点58分,你启动了闹铃设置界面,并按Home键回桌面;在上午5点59分时,你在微信和朋友聊天;在6点时,闹铃响了,并且弹出了一个对话框形式的Activity(名为AlarmAlertActivity)提示你到6点了(这个Activity就是以SingleInstance加载模式打开的),你按返回键,回到的是微信的聊天界面,这是因为AlarmAlertActivity所在的Task的栈只有他一个元素,因此退出之后这个Task的栈空了。如果是以SingleTask打开AlarmAlertActivity,那么当闹铃响了的时候,按返回键应该进入闹铃设置界面。

4、onSaveInstanceState和onRestoreInstanceState

出现时机:Activity被异常销毁的时候会调用onSavaInstanceState方法,重建时会调用onRestoreInstanceState来获取已保存的数据,也可以通过onCreate 获取。

发生场景:资源相关的系统配置发生改变、内部不足、开启不保留活动等等。

例子:

开启不保留活动,跳到另一个Activity时:
onPause -> onSaveInstanceState -> onStop -> onDestroy

回到上一个Activity时:
onCreate -> onStart -> onRestoreInstanceState -> onResume

你可能感兴趣的:(Activity)