Activity生命周期

持续更新......

1.关于生命周期的一些想法

生命周期描述的"组件"由创建->...->销毁的过程,掌握这些流程,以及对应流程的特性,不仅有助于我们更好的了解"组件"的生成过程,也有助于我们更好的管理"组件",从而针对不同的生命状态做不同的事,进而达到对app状态维护,性能维护达到最佳效果.
2.Activity 的生命周期

Activity生命周期总结

通常情况下的生命周期


1.Entire Lifetime :

onCreate() -> onStart() -> onResume()  -> onPause() -> onStop() -> onDestroy()

expand:

onPause() 做一些存储数据,停止动画工作,但不能太耗时,会影响到新Activity的显示,onPause必须先执行完,新的Activity的onCreate()才会执行

onStart() / onStop() 可见,但还没出现在前台,无法与用户交互

onResume() / onPause() 可见且在前台

2.Visible Lifetime

onStart() -> onStop()

当执行onStart回调方法时,Activity开始被用户所见(也就是说,onCreate时用户是看不到此Activity的,那用户看到的是哪个?当然是此Activity之前的那个Activity),一直到onStop之前,此阶段Activity都是被用户可见

3.Forground Lifetime

onResume() -> onPause()

当执行到onResume回调方法时,Activity可以响应用户交互,一直到onPause方法之前


影响Activity生命周期

前提 : Activity栈中只有A

1.Back

按下Back键,系统返回到桌面,并依次执行A:onPause -> A:onStop -> A:onDestroy

2.Home

按下Home键(非长按),系统返回到桌面,并依次执行A:onPause -> A:onStop

3.Activity A被覆盖或者锁屏或者home

onPause() -> onSaveInstanceState() -> onStop()

------------------------------------------------------------------

从锁屏状态恢复 :

从home状态走任务栈恢复:

onRestart() -> onStart() -> onResume()

------------------------------------------------------

从home状态走点击图标恢复

onNewIntent() -> onRestart() -> onStart() -> onResume()

----------------------------------------------------------------------------

4.Activity A启动Dialog

当activity中弹出dialog对话框的时候,activity不会回调onPause。

然而当activity启动dialog风格的activity的时候,此activity会回调onPause函数


Activity与Fragment的生命周期方法

前提: 启动Activity A 中的 Fragment F

创建过程:

A onCreate() ->

F onAttach() -> onCreate() -> onCreateView() -> onViewCreated() -> onActivityCreated() -> onStart()

A onStart() ->  onResume()

F onResume()

destroy销毁过程:

F onPause() ->

A onPause() ->

F onStop() ->

A onStop() ->

F onDestroyView() -> onDestroy() -> onDetach() ->

A onDestroy()

home键操作返回桌面:

F onPause() ->

A onPause() ->

F onStop() ->

A onStop()

home键后从桌面返回界面

A onRestart() ->

F onStart() ->

A onStart() -> onResume()

F onResume()


扩展

1.将Back操作替换为home效果?

#1.通过startActivity()

Intent home = new Intent(Intent.ACTION_MAIN);

home.addCategory(Intent.CATEGORY_HOME);

startActivity(home);

#2.直接调用Api

activity.moveTaskToback(true).

这个方法直接将当前的Activity所在task移到后台,同时保留activity的顺序和状态

Activity onStart 的作用:

thansk: https://blog.csdn.net/qq_40967402/article/details/83244665
这两个生命周期的这种形式可以运用在很多地方 举个例子 视频播放器 假如你在播放视频的时候电话进来了 你接电话的时候 视频还在播放 这肯定是不行的 那么我们可以在onStop()中做操作 因为 电话进来的时候 焦点已经到了打电话那里 应用自主运行onStop()方法 那么我们就可以在onStop()做处理 这样 当应用每次失去焦点的时候都会暂停播放视频 如果你想再回到应用的时候视频继续播放 可以在 onStart()中设置 因为每次运行onStop()后 再进来都会运行onStart() 它们是成对出现的

thanks : https://www.it1352.com/1915546.html

onStart() is called when activity resumes from stopped state. For example, if you have activity A and starts activity B from it, then activity A will be paused (onPause()) and then stopped (onStop()) and moved to back stack. After this, if you press Back into your activity B, B will be paused(onPause()), stopped (onStop()) and destroyed(onDestroy()), and activity A will be restored from back stack, started (onStart()) and resumed(onResume()). As you can see, system will not call onCreate() for A again.

How to use onStart()? For example, you should unregister listeners for GPS, sensors, etc in onStop() and register again in onStart(). If you register it in onCreate() and unregister in onDestroy(), then GPS service will work always and it will drain battery.

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

推荐阅读更多精彩内容