Android学习路Android知识

Activity的生命周期和启动模式

2016-09-30  本文已影响54人  fengmlo

Activity生命周期分析

正常情况下的生命周期

正常启动流程:onCreate -> onStart -> onResume
启动另一Activity:onPause -> onStop
回到当前Activity:onRestart -> onStart -> onResume
返回键退出:onPause -> onStop -> onDestroy
内存不足时:onStop -> onCreate -> onStart -> onResume

异常情况下的生命周期

  1. 资源相关系统配置发生改变导致Activity重启
    典型情况是屏幕旋转时。系统在调用onDestroy前(和onPause没有明确的先后关系)会调用onSaveInstanceState保存一个Bundle对象,并在重启后onStart后调用onRestoreInstanceState并传入保存的Bundle对象。系统自带的View会自动保存恢复状态。
    可以在两个位置恢复数据,onCreate和onRestoreInstanceState,区别是onCreate时Bundle可能是null,而onRestoreInstanceState若被系统调用Bundle一定有值。官方建议用后者。当Bundle有值的时候,同时在两个位置都能取到值。
    onSaveInstanceState只会在Activity重启的时候才会调用,正常销毁时不会调用。

  2. 资源内存不足导致低优先级的Activity被杀死
    Activity优先级排序:
    1、前台活动Activity,onResume的
    2、前台但不活动Activity,onPause的
    3、后台Activity,onStop的
    系统会按照优先级去杀死目标Activity所在进程。如果一个进程中没有四大组件在运行,这个进程很容易被杀死。所以后台工作应该尽量放在Service中。

若不想让系统配置改变时重新创建Activity,可以在AndroidManifest.xml中配置:

<activity
    android:configChanges="locale|orientation|screenSize|keyboardHidden">

其中orientation和screenSize经常联用,可以避免在屏幕旋转的时候重建Activity。
此时,系统配置改变后,会调用Activity的onConfigurationChanged方法,我们可以自己做一些特殊的处理。

一点思考:

  • 自定义View时可以override onSaveInstanceState和onRestoreInstanceState来保存View状态。
  • 有些后台工作可能能脱离四大组件运行在进程中,比如未关闭的Thread。

Activity的启动模式

LaunchMode

上一篇 下一篇

猜你喜欢

热点阅读