美文网首页
Android基础-Activity生命周期

Android基础-Activity生命周期

作者: FourStars | 来源:发表于2018-09-18 21:28 被阅读0次

    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前,后,或同时调用

    相关文章

      网友评论

          本文标题:Android基础-Activity生命周期

          本文链接:https://www.haomeiwen.com/subject/pxwmnftx.html