Activity生命周期


Activity的生命周期受Activity透明主题,和dialog主题的影响,若加入透明主题或dialog主题则生命周期会复杂许多。activity生命周期和解锁屏幕,按home键和启动新activity(不管新activity属于当前应用还是其他应用还是系统 应用)有关,与dialog、DialogFragment和下拉状态栏无关。


activity透明主题和dialog主题( android:theme="@android:style/Theme.Dialog" )效果是一样的,为了描述方便,下面所有指明透明主题 的地方都指代透明主题或dialog主题


onCreate :Activity正在被创建,这是生命周期第一个方法


onRestart: Activity正在重新启动,一般情况下当当前Activity由不可见(即 其他Activity挡在了该Activity上面)重新变为可见时 。比如用户按home键回到桌面或启动了新的非透明Activity或锁屏,这时当前activity就会暂停,即 执行了 onPause和onStop方法,接着用户 又回到这个Activity时就会执行该方法。


onStart:Activity正在启动,这时Activity已经可见,但还没有出现在前台,无法和用户交互,这个时候可以理解为activity已经出现了,但我们还看不到。


onResume:Activity已经可见了,并出现在前台,并开始活动,。


onPause: Activity正在停止,该方法内部不能执行耗时操作,不然会影响新Activity显示,onPause必须执行完新Activity才会onResume,当锁屏或按home键或启动新的Activity时(不管新activity主题是否透明)会执行该方法。


onStop:Activity即将停止,可以做一些稍微重量级的回收工作,当锁屏或按home键或启动新的非透明主题Activity时会执行该方法。


onDestroy:Activity即将被销毁,这是Activity的生命尽头,在方法内部可以做一些回收工作和最终的资源释放。默认情况下按返回键后会执行该方法



下面看一下几个例子:


1.三个非透明主题Activity(即 清单文件中没有配置   <activity android:theme="@android:style/Theme.Translucent"   )

依次执行 启动Activity1,启动Activity2,返回键结束Activity2,返回键结束Activity1

依次打印如下,可以看到要启动新Activity时要先onPause当前activity,然后执行新activity由onCreate到onResume的过程,执行完后再执行onStop方法。

当要返回的前一个Activity时要先onPause当前activity,然后执行前一activity由不可见到onResume的生命周期,然后再执行onStop和onDestroy

Activity生命周期_第1张图片

依次执行启动activity1,锁屏,解锁,按home键,再次点击桌面图标,返回键结束activity1,打印如下




2.第一第二个Activity主题不透明,第二个透明主题(即 清单文件中配置   <activity android:theme="@android:style/Theme.Translucent"   )

生命周期有些复杂

依次执行 启动Activity1,启动Activity2,启动Activity3,返回键结束Activity3,返回键结束Activity2,返回键结束Activity1

依次打印如下

Activity生命周期_第2张图片

Activity生命周期_第3张图片

可以看到启动透明主题Activity2后activity1并没有执行onStop(黑色框中内容),可以认为是还可以看到activity1(比如透明主题的activity2的布局文件只有半屏的高度,此时确实可以看到位于下方的activity1),所以没执行onStop,当启动非透明主题的activity3时,才会执行activity1的onStop(红色框中内容),此时可以认为不管布局怎样,透过activity3都不可能看到activity1和activity2了,所以可以执行onStop方法了。当结束掉非透明主题的activity3时(深蓝色框),此时相当于又可以透过activity2看到activity1了,而且前面的步骤已经执行了activity1的onStop,所以会执行activity1的onRestart和onStart,然后执行activity2的nRestart,onStart和onResume。当结束activity2时,activity1只会执行onResume,因为前面的步骤已经执行过onRestart和onStart了。


、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

总结

综上所述,activity生命周期中,onCreate和onDestroy成对出现,onStart和onStop成对出现,onResume和onPause成对出现。

onRestart只有重新显示时才会执行。

当启动或关闭activity时,都会先执行当前activity的onPause方法,但onStop方法未必会执行。

Activity的生命周期受Activity透明主题和dialog主题的影响。activity生命周期和解锁屏幕,按home键和启动新activity(不管新activity属于当前应用还是其他应用还是系统 应用)有关,与dialog、DialogFragment和下拉状态栏无关。


ps: 有必要指定透明主题吗? 简书,手艺等app的仿ios右滑返回就可以通过设置透明主题和自定义支持右滑的控件来实现




你可能感兴趣的:(android)