Android基础-Activity生命周期

Activity是和我们打交道最多的组件,基本上App的每个界面都是Activity组成,或者由Activity搭载而成的

Activity

Activity跟我们人一样,也有着其生老病死的过程,我们称之为生命周期

生命周期

官网的生命周期图

onCreate(Bundle savedInstanceState)

  • 调用时机:Activity初次创建时
  • 可执行操作:
    1. 通过Bundle恢复因Activity意外重建的数据
    2. 加载布局资源
    3. 初始化View,实例化变量

onStart()

  • 调用时机:Activity可见时,处于Started状态
  • 可执行操作:
    1. 注册BroadCastReceiver监控UI的变化
    2. 非耗时操作:onStart()会很快的执行完毕,进入onResume()

onResume()

  • 调用时机:Activity进入前台,可与应用交互,进入Resumed状态,Activity处于栈顶
  • 可执行操作:
    1. 初始化应在onPause()中释放的资源

onPause()

  • 调用时机:离开前台,不可交互(即不能对界面进行点击,或点击没反应),如打开半透明的Activity
  • 可执行操作:
    1. 释放系统资源
    2. 停止动画
    3. 处理传感器Gps
    4. 其它耗时短的操作

onStop()

  • 调用时机:Activity对用户不可见,进入Stoped状态
  • 可执行操作:
    1. 保存数据到数据库
    2. 释放一些在不可见状态下无用的资源

onDestory()

  • 调用时机:Activity调用finish(),或因配置更改系统暂时销毁Activity时
  • 可执行操作:
    1. 释放onStop()中未释放的资源

onRestart()

  • 调用时机:Activity停止后再次启动时调用该方法

Tips
onPause()不能做耗时操作的原因:onPause和onResume可能会经常被调用
只有执行完onPause才会进入下一个方法(onResume或者onStop)
所以一切为了避免因卡在onPause方法而影响到Activity的交互体验

  • 来自官网的原话
Activity中的回调

以ABCDEF代替Activity的六大生命周期状态,A对应onCreate,以此类推
在Activity各个回调中进行打印log,结果如下

单Activity启动及其他操作下的回调

打开 Activity:
onCreate->onStart->onResume
点击 Home键回桌面:
onPause->onStop->onSaveInstanceState
再次打开 Activity
onRestart->onStart->onResume
按 Back键关闭 Activity
onPause->onStop->onDestory

打开Activity(竖屏显示)然后旋转手机(横屏显示):

竖屏:
onCreate->onStart->onResume
旋转手机到横屏:
onPause->onStop->onSaveIntanceState->onDestory->onCreate->onStart->onRestoreInstanceState->onResume

Tips:

  1. 这里onSaveIntanceState和onRestoreInstanceState是为了恢复因配置改变(如横竖屏幕切换显示,或其他意外事件重建Activity)的Activity数据
  2. 在Manifest文件中为Activity添加android:configChanges="orientation|screenSize"属性,Activity就不会因为横竖屏幕切换而重建Activity

由一个Activity到另一个Activity

打开 First Activity:
First中的回调:onCreate->onStart->onResume
在 First中打开正常的 Secend Activity:
First:onPause-> Seceond:onCreate->onStart->onResume-> First:onStop->onSaveInstanceState
关闭 Second:
Second:onPause-> First:onRestart>onStart->onResume-> Second:onStop->onDestory
关闭 First:
First:onPause->onStop->onDestory

锁屏然后点亮屏幕

锁屏:
onPause->onSaveInstance->onStop
再次点亮:
onRestart->onStart->onResume

由普通Activity A到透明Activity或主题@style/Base.Theme.AppCompat.Light.Dialog的Activity B

打开透明 Activity或 Dialog
A:onPause-> B:onCreate->onStart->onResume
Back回 A
B:onPause-> A:onResume-> B:onStop->onDestory

透明主题和Dialog主题配置

    <style name="Theme.Transparent" parent="Base.Theme.AppCompat">
        <item name="android:windowIsTranslucent">true</item>
        <item name="android:windowBackground">@android:color/transparent</item>
        <item name="android:windowContentOverlay">@null</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowIsFloating">true</item>
        <item name="android:backgroundDimEnabled">false</item>
    </style>

    <activity
            android:name=".lesson4.Dialog"
            android:theme="@style/Base.Theme.AppCompat.Light.Dialog">

    </activity>
    <activity
            android:name=".lesson4.Transparency"
            android:theme="@style/Theme.Transparent">

    </activity>

Tips:经多次log打印,发现onSaveInstanceState调用时机在onPause之后,在onStop前,后,或同时调用

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Activity / Fragment 的生命周期是每个 Android 开发者最最基础的知识点。所以特别有必要自...
    谢三弟阅读 921评论 0 1
  • AndroidLifeCycle Android中关于Activity和Fragment的生命周期调用流程 Act...
    撑起头顶的天阅读 974评论 0 0
  • 【Android Activity】 什么是 Activity? 四大组件之一,通常一个用户交互界面对应一个 ac...
    Rtia阅读 3,854评论 3 18
  • 启动与销毁Activity 不同于使用 main() 方法启动应用的其他编程范例,Android 系统会通过调用对...
    mouekz阅读 673评论 0 0
  • 河西走廊,戈壁坚硬,黄沙漫漫,阳光炽烈如火一般燃烧,荒漠,戈壁,劲吹的风沙铺天盖地..... 孤独前行,去体验四天...
    studay阅读 411评论 1 1