Android基础-Activity生命周期

2018-09-18  本文已影响0人  FourStars

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

Activity

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

生命周期

官网的生命周期图

onCreate(Bundle savedInstanceState)

onStart()

onResume()

onPause()

onStop()

onDestory()

onRestart()

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

上一篇下一篇

猜你喜欢

热点阅读