Android 菜鸟季:BroadcastReceiver 和 Activity生命周期

  两个知识点,因为菜鸟放在了一起。

今天在弄一个电池管理的程序,涉及到建立一个BroadcastReceiver ,建立一个IntentFiler,截取系统广播的Intent.ACTION_BATTERY_CHANGED 消息。测试时,程序该功能运行正常,但是当按back按键后,Android Monitor报错:

“XXXX.... has leaked IntentReceiver ”,"XXXX... Are you missing a call to unregisterReceiver()?"

我是在OnCreate中对于BroadcastReceiver 作了注册,百度了一下,看到一些blog上的demo在OnDestroy中作了注销,更换了google继续确认下,头一条就是android官网上关于Anroid生命周期的描述,截个图就一幕了然:


一个Activity启动后或从后台转到前台顺序执行OnCreate, OnStart, OnResume,当按back后,该activity处于OnStop状态,会顺序执行OnPause、OnStop、OnDestroy。实际当中利用Log工具验证了下执行顺序,没有问题。也就是我在OnCreate中注册的BroadcastReceiver当back按键按下后没有注销,当程序再次处于focus状态,又重新注册了一遍……

根据网站建议:

1 BroadcastReceiver 的注册与注销在OnStart、OnStop中进行;

2 OnPause和OnResume两个活动会经常发生,比如休眠或Intent传送,因此在这两个函数中的处理应当简洁

……

将registerReceiver、unregisterReceiver分别放到了重载后的Onstart以及OnStop函数中,经测试工能正常。

关于Activity生命周期的描述:

http://developer.android.com/reference/android/app/Activity.html

获取电池电量参考的一个blog:

http://blog.csdn.net/sheldon4090/article/details/8109605


你可能感兴趣的:(Android 菜鸟季:BroadcastReceiver 和 Activity生命周期)