那些生命的足迹

2018-12-06  本文已影响0人  SnailWalker

持续更新......

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的顺序和状态

上一篇下一篇

猜你喜欢

热点阅读