关于 Android O 更改的 BroadcastReceiver 的生命周期
Lifetime of BroadcastReceiver with regard to Android O changes
如果我通过 mainfest 文件声明一个 BroadcastReceiver
用于系统广播(例如 ACTION_POWER_DISCONNECTED
),系统将在每次发送特定广播时调用它,因此BroadcastReceiver 不受限制。
但也有无法通过清单文件注册的广播。对于这些广播,我们必须用相应的 IntentFilter
调用 context.registerReceiver
。假设我为 BOOT_COMPLETED
创建了一个 BroadcastReceiver 并从中调用 context.registerReceiver
而从不调用 unregisterReceiver
这个接收器是否也永远存在(直到 phone 重新启动)?
Apps that target Android O can no longer register broadcast receivers for implicit broadcasts in their manifest. An implicit broadcast is a broadcast that does not target that app specifically.
如果我上面的猜想是正确的,这将是系统更改的简单解决方法(当然你不应该这样做,但这是可能的)。那么在 BOOT_COMPLETED
广播之后注册的 BroadcastReceiver
是否与通过清单自动注册的 BroadcastReceiver 具有相同的生命周期(一直持续到下一次重启)?
Let's say I create a BroadcastReceiver
for BOOT_COMPLETED
and call context.registerReceiver
from it and never call unregisterReceiver
does this receiver also lives forever (until the phone is rebooted)?
首先,BOOT_COMPLETED
是 one of those actions,仍然会像以前一样运行,这意味着 "O" 中引入的限制与该操作无关。
一旦您的应用程序的进程被系统终止或系统清除您的应用程序的内存(由于设备内存不足),您的广播注册将丢失。否则我看不出这个限制如何带来更好的电池体验。
So does a BroadcastReceiver
which is registered after a BOOT_COMPLETED
broadcast have the same lifetime (stays until the next reboot) as a BroadcastReceiver
which is automatically registered via the manifest?
如果不满足上述情况,即您的应用程序的进程保持活动状态并且应用程序由于内存不足而未从内存中清除 - 那么是的。一旦进入cached state(没有活动Android组件的状态),注册将再次丢失。
这个short video by Nasir Khan会有帮助。
如果我通过 mainfest 文件声明一个 BroadcastReceiver
用于系统广播(例如 ACTION_POWER_DISCONNECTED
),系统将在每次发送特定广播时调用它,因此BroadcastReceiver 不受限制。
但也有无法通过清单文件注册的广播。对于这些广播,我们必须用相应的 IntentFilter
调用 context.registerReceiver
。假设我为 BOOT_COMPLETED
创建了一个 BroadcastReceiver 并从中调用 context.registerReceiver
而从不调用 unregisterReceiver
这个接收器是否也永远存在(直到 phone 重新启动)?
Apps that target Android O can no longer register broadcast receivers for implicit broadcasts in their manifest. An implicit broadcast is a broadcast that does not target that app specifically.
如果我上面的猜想是正确的,这将是系统更改的简单解决方法(当然你不应该这样做,但这是可能的)。那么在 BOOT_COMPLETED
广播之后注册的 BroadcastReceiver
是否与通过清单自动注册的 BroadcastReceiver 具有相同的生命周期(一直持续到下一次重启)?
Let's say I create a
BroadcastReceiver
forBOOT_COMPLETED
and callcontext.registerReceiver
from it and never callunregisterReceiver
does this receiver also lives forever (until the phone is rebooted)?
首先,BOOT_COMPLETED
是 one of those actions,仍然会像以前一样运行,这意味着 "O" 中引入的限制与该操作无关。
一旦您的应用程序的进程被系统终止或系统清除您的应用程序的内存(由于设备内存不足),您的广播注册将丢失。否则我看不出这个限制如何带来更好的电池体验。
So does a
BroadcastReceiver
which is registered after aBOOT_COMPLETED
broadcast have the same lifetime (stays until the next reboot) as aBroadcastReceiver
which is automatically registered via the manifest?
如果不满足上述情况,即您的应用程序的进程保持活动状态并且应用程序由于内存不足而未从内存中清除 - 那么是的。一旦进入cached state(没有活动Android组件的状态),注册将再次丢失。
这个short video by Nasir Khan会有帮助。