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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值