如果一个 Activity 在用户可见时才处理某个广播,不可见时注销掉,那么应该在哪两个生命周期的回调方法去注册和注销
BroadcastReceiver 呢?
Activity 的可见生命周期发生在 onStart调用与 onStop调用之间。在这段时间,用户可以在屏幕上看到 Activity 并与其交互。我们可以在 onStart中注册一个BroadcastReceiver 以监控影响 UI 的变化,并在用户无法再看到您显示的内容时在
onStop 中将其取消注册。
如果有一些数据在 Activity 跳转时(或者离开时)要保存到数据库,那么你认为是在 onPause 好还是在 onStop
执行这个操作好呢?
onPause 较容易被触发,所以我们在做 BroadcastReceiver 注销时放在onStop要好些。onPause 时 Activity 界面仍然是可见的,如弹出一个 Dialog 时。但在保存数据时,放在 onPause 去做可以保证数据存储的有效性,如果放在 onStop 去做,在某些情况下 Activity 走完 onPause 后有可能还没顺利走到 onStop 就被系统回收了。
但要注意在 onPause 中要非常迅速地执行完所需操作,不然会影响到下一个 Activity 的生命周期函数的调用。
简单说一下 Activity A 启动 Activity B 时,两个 Activity 生命周期的变化。
当一个 Activity 启动另一个 Activity 时,它们都会发生生命周期转变。第一个 Activity 暂停然后停止(但如果它在后台仍然可见,则不会停止,比如 B 是半透明的),系统会创建另一个 Activity。 如果这两个 Activity 共用保存数据到文件或者数据库,必须要注意,在创建第二个 Activity 前,第一个 Activity 不会完全停止。更确切地说,启动第二个 Activity 的过程与停止第一个 Activity 的过程存在重叠。
以下是当 Activity A 启动 Activity B 时一系列操作的发生顺序:
Activity A 的 onPause 方法执行。
Activity B 的 onCreate、onStart 和 onResume 方法依次执行。
然后,如果 Activity A 在屏幕上不再可见,则其 onStop 方法执行。
你的朋友是不是也在准备面试呢?你可以“请朋友读”,把今天的题目分享给好友,或许你能帮到他。