- 《Android自定义View之Activity页面的组成》
- 《Android Activity——启动过程探索(一)》
- 《Android Activity——启动过程探索(二)》
- 《Android Activity——启动过程探索(三)》
- 《Activity 启动模式及任务栈探究》
- 《Activity常见问题》
Activity常见问题
通过这篇博客,我们能知道以下问题:
Activity各种情况下的生命周期- 弹出
Dialog对Activity生命周期有什么影响? onActivityResult()在哪两个生命周期之间回调?Activity在onResume()之后才显示的原因是什么?- 通过 Sheme 协议打开
Activity Activity什么时候会发生重建?- 在
Activity的onCreate()方法里写死循环会 ANR 吗?
1. Activity 生命周期方法相关
生命周期的回调方法
Activity生命周期的回调主要有 onCreate()、onRestart()、onStart()、onResume()、onPause()、onStop()、onDestory() 几个方法。
调用时机说明:
onCreate():系统创建Activity时触发,用来初始化 Activity 的基本组件。onRestart():当处于“已停止”状态的Activity即将重启时,系统就会调用此回调。onStart():Activity将进入“已启动”状态,并对用户可见。onResume():系统会在Activity开始与用户互动之前调用此回调。此时,该Activity位于Activity堆栈的顶部,并会捕获所有用户输入onPause():当Activity失去焦点并进入“已暂停”状态时,系统就会调用此回调。onStop():当Activity对用户不再可见时,系统就会调用此回调。onDestory():系统会在销毁Activity之前调用此回调。此回调是Activity接收的最后一个回调。通常,实现onDestroy()是为了确保该Activity的所有资源。
onStart() 和 onStop() 是从 Activity 是否可见来回调的,onResume() 和 onPause() 是从 Activity 是否位于前台来回调的。
在生命周期里几种状态:
-
Activity的整个生命周期发生在onCreate()与onDestroy()之间,在onCreate()中执行“全局”状态设置(例如状态布局),并在onDestroy()中释放资源。 -
Activity的可见生命周期发生在onStart()与onStop()之间,在这段时间内Activity对用户可见。在整个生命周期中,当 Activity 在对用户可见和隐藏俩种状态中交替变化时,系统会多次调用onStart()和onStop()。 -
Activity的前台生命周期发生在onResume()与onPause()之间,Activity位于其他Activity之前(栈顶位置),可与用户交互并具有输入焦点。但状态改变频繁,系统会多次调用onResume()和onPause(),建议做些轻量级操作。
打开Activity时两个Activity的生命周期方法的回调顺序
当一个 Activity 启动另一个 Activity 时,它们都会经历生命周期转换。第一个 Activity 停止运行并进入“已暂停”或“已停止”状态,同时创建另一个 Activity。
-
ActivityA 启动ActivityB,BActivity的launchMode为standard或者 BActivity没有可复用的实例时: A.onPause()-> B.onCreate()-> B.onStart()-> B.onResume()-> A.onStop()--> A.onDestory()(如果需要关闭Activity A[A 被移出栈]) -
ActivityA 启动ActivityB,BActivity的launchMode为singleTop且 BActivity已经在栈顶时(一些特殊情况如通知栏点击、连点、BActivity自己打开自己),此时只有 B 页面自己有生命周期变化:B.onPause()-> B.onNewIntent()-> B.onResume() -
当 B
Activity的launchMode为singleInstance,singleTask且对应的 BActivity有可复用的实例时:A.onPause()-> B.onNewIntent()-> B.onRestart()-> B.onStart()-> B.onResume()-> A.onStop()--> A.onDestory()(如果需要关闭Activity A[A 被移出栈]) -
当 B
Activity的Theme为Dialog

本文详细探讨了Android Activity的生命周期,包括不同状态的回调方法及其顺序,弹出Dialog对Activity的影响,onActivityResult的回调时刻,Activity显示延迟的原因,通过URL Scheme打开Activity的配置与使用,以及何时会触发Activity的重建。同时,解释了在onResume方法中写死循环会导致ANR的情况。
1272

被折叠的 条评论
为什么被折叠?



