持续更新......
1.关于生命周期的一些想法
生命周期描述的"组件"由创建->...->销毁的过程,掌握这些流程,以及对应流程的特性,不仅有助于我们更好的了解"组件"的生成过程,也有助于我们更好的管理"组件",从而针对不同的生命状态做不同的事,进而达到对app状态维护,性能维护达到最佳效果.
2.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的顺序和状态
网友评论