前言
之前做线控耳机连点两下切下一首歌的需求时, 曾经尝试在BroadcastReceiver
中用一个成员变量保存最后一次按下的时间, 但后来发现这个值一直是初始值, 对它赋值后, 再次收到Intent
时发现它的值又变成初始值了.
后来看到一些问题, 问BroadcastReceiver
的生命周期, 按理说它就一个onReceive
能有什么生命周期, 其实这里问的生命周期和我们平时说的Activity
的生命周期还是有区别的.
BroadcastReceiver对象的生命周期
问题的根源在于, 在AndroidManifest.xml
中注册的BroadcastReceiver
, 每次收到一个Intent
, 也就是onReceive
被回调的时候, 这个BroadcastReceiver
都是新创建出来的, 官方文档中写:
A BroadcastReceiver object is only valid for the duration of the call to onReceive(Context, Intent). Once your code returns from this function, the system considers the object to be finished and no longer active.
也就是说, 出了onReceive
, 这个BroadcastReceiver
对象的生命周期就已经到头了, 这也是为什么我们不能在onReceive
中进行一些异步操作的原因, 有可能异步操作还没完成, BroadcastR