Android知识技术干货Android技术知识

Android生命周期总结

2017-12-25  本文已影响0人  钟离四郎

一、知识总结

Activity生命周期与启动模式总结.png

二、Activity生命周期

上图是Activity状态迁移图:

Resumed:
    此时Activity处于前台,是可见可交互的,处于在栈顶位置。
Paused:
   Activity被部分遮盖,比如说启动一个半透明的Activity或者Dialog类型的Activity时,Activity不会被完全遮盖,任然可见,在系统内存不足的情况下有可能被回收。

Stopped:
    Activity被完全遮盖,不可见,有必要时可以被回收,被回收的可能性比处于Pause状态时要大。

其他状态(“创建”和“开始”)是瞬态,系统会通过调用下一个生命周期回调方法从这些状态快速移到下一个状态。 也就是说,在系统调用 onCreate() 之后,它会快速调用 onStart(),紧接着快速调用 onResume()。

onCreate:
    表示Activity正在被创建,做一些初始化的操作,比如初始化View,调用setContentView设置界面布局资源等等。

onStart:
    这个方法会很快的执行,这个方法被执行表明Activity已经做好进入前台以及与用户交互的准备了,已经是可见的了,但是还没有获得焦点,还不能与用户交互,不在前台,onResume方法会接着被调用。

onResume:
     onResume紧接着onStart被调用,此时Activity是可见的并且是可以交互的,处于前台。

onPause:
    此时Activity被部分遮盖,任然可见,但是已经失去焦点,不能与用户交互。需要注意的是只有这个方法被执行之后,才会去创建被启动的Activity,因此在onPause方法中不能做耗时操作,否则会导致下一个要启动的Activity不能及时被创建。

onStop:
这个方法被调用时,Activity是处于不可见,当然已不再是可交互,更不在前台,这里可以做一些资源的回收,过于重量级的操作也不应该放在这里。

onDestroy:
表示Activity即将被回收,大多数应用不需要实现此方法,因为局部类引用与 Activity 一同销毁,并且您的 Activity 应在onPause()和onStop()期间执行大多数清理操作。但是如果 Activity 包含在onCreate()期间创建的后台线程或其他如若未正确关闭可能导致内存泄露的长期运行资源,则应在onDestroy()期间终止它们。另外这里提一下onDestroy()与finish()的区别,调用finish()方法,系统只是将最上面的Activity移出了栈,并没有马上的调用onDestory()方法,其占用的资源也没有被马上释放,即finish()只是负责将Activity移除栈,资源的释放时机是系统自己控制的。比如:在onCreate()调用finish(),函数回调顺序是:onCreate()-->finish()-->onDestroy();在onStart()中调用finish(),函数调用顺序:onCreat()-->onStart()-->finish()-->onStop()-->onDestroy()

Activity异常生命周期的两种情景:

1.资源相关的系统配置发生改变导致Activity被杀死并重新创建
系统配置项目如下:


系统配置项目.png

当系统配置发生改变之后Activity会被重新创建,当然也有办法阻止系统创建Activity,方法如下:
指定Activity的configChanges属性,比如不想让Activity在屏幕旋转时重新创建,可以给Activity的configChanges属性添加orientation这个值,如下:
android:configChanges="orientation"如果想指定多个值可以用“|”隔开。

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

Activity按照优先级分为3种

三、启动模式

image.png

四、参考

http://blog.leanote.com/post/nicnick-xia/Android-Activity%E5%BC%82%E5%B8%B8%E6%83%85%E5%86%B5%E4%B8%8B%E7%9A%84%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F

上一篇下一篇

猜你喜欢

热点阅读