生命周期-Activity

Posted oldkeyset

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了生命周期-Activity相关的知识,希望对你有一定的参考价值。

Activity 是一个应用组件,用户可与其提供的屏幕进行交互,以执行拨打电话、拍摄照片、发送电子邮件或查看地图等操作。 每个 Activity 都会获得一个用于绘制其用户界面的窗口。

窗口通常会充满屏幕,但也可小于屏幕并浮动在其他窗口之上。
一个应用通常由多个彼此松散联系的 Activity 组成。 一般会指定应用中的某个 Activity 为“主”Activity,即首次启动应用时呈现给用户的那个 Activity。 

而且每个 Activity 均可启动另一个 Activity,以便执行不同的操作。 每次新 Activity 启动时,前一 Activity 便会停止,但系统会在堆栈(“返回栈”)中保留该 Activity。

当新 Activity 启动时,系统会将其推送到返回栈上,并取得用户焦点。 返回栈遵循基本的“后进先出”堆栈机制,因此,当用户完成当前 Activity 并按“返回”按钮时,系统会从堆栈中将其弹出(并销毁),然后恢复前一 Activity。
当一个 Activity 因某个新 Activity 启动而停止时,系统会通过该 Activity 的生命周期回调方法通知其这一状态变化。

Activity 因状态变化—系统是创建 Activity、停止 Activity、恢复 Activity 还是销毁 Activity— 而收到的回调方法可能有若干种,每一种回调都会为您提供执行与该状态变化相应的特定操作的机会。

例如,停止时,您的 Activity 应释放任何大型对象,例如网络或数据库连接。 当 Activity 恢复时,您可以重新获取所需资源,并恢复执行中断的操作。 这些状态转变都是 Activity 生命周期的一部分。
onCreate() 创建
首次创建Activity时调用。
此方法中执行所有正常的静态设置—创建视图,将数据绑定到列表等等。系统向此方法传递一个Bundle对象,其中包含Activity的上一状态,不过至少是捕获了该状态。
始终后接onStart()。

不能事后终止。
onRestart() 重启

在活动已停止并即将再次首次启动前调用。 始终后接 onStart() 不能事后终止。
onStart()  启动
在活动即将对用户可见之前调用。
如果活动转入前台,则后接onResume(),如果活动转入隐藏状态,则后接onStop()。
不能被事后终止。
onResume() 恢复

在活动中,活动即将开始与用户进行交互之前调用。

始终后接onPause()。

不能被事后终止。
onPause() 暂停

此系统通常用于确认对持久性数据的未保存更改,停止动画以及其他可能消耗的CPU内容,诸如此类。它应该非常迅速地执行所需操作,因为它返回后,下一个活动才能继续执行。

如果活动返回前台,则后接onResume(),如果活动转入对用户不可见状态,则后接onStop()。

能被事后终止。
onStop() 停止

如果活动被销毁,或另一个Activity(一个现有的Activity或新Activity)继续执行进入其覆盖范围,就可能发生这种情况。

如果Activity恢复与用户的互动,则后接onRestart(),如果Activity被销毁,则后接 onDestroy()。

能被事后终止。
onDestroy() 销毁

当活动结束(有人对活动调用了finish()),或系统为节省空间而暂时销毁该活动时,实例活动,可能会调用它。可以通过isFinishing()方法区分这两种情况。

能被事后终止。
总结

一个Activity正常启动  onCreate-->onStart-->onResume

一个Activity 正常退出(返回键回退到桌面) onPause-->onStop-->onDestroy

再次启动 同正常启动
已经处于前台Activity

跳转到另外一个Activity之前

当前Activity执行 onPause-->onStop 

回退到当前 Activity 执行 onRestart-->onStart-->onResume
Activity 按home键返回桌面 onPause-->onStop 

再次回来 onRestart -->onStart -->onResume

Activity home键返回桌面后 不可操作 onPause-->onStop

(如:熄屏了,打开了其他Activity),或应用被强行杀死了

再次回到Activity onCreate--onStart-->onResume
对话框存在时对生命周期的影响

普通对话框对生命周期没有任何影响

将另外一个Activity设计成对话框形式显示 通过android:theme="@style/Theme.AppCompat.Dialog" 

启动对话框,当前Activity执行 onPause 

对话框操作结束,返回当前Activity 执行 onResume

以上是关于生命周期-Activity的主要内容,如果未能解决你的问题,请参考以下文章

导航上的片段生命周期重叠

使用 Fragment 和 Activity 执行生命周期流程的问题

自动挂钩到 Activity 生命周期方法的异步任务库

React Native 中的 Android Activity 生命周期 - ViewPager

我可以管理生命周期所有者,用 Koin 注入 viewModel 吗?

Activity的生命周期