android BroadcastReceiver 生命周期的问题

最近在项目中遇到一个问题,解决的过程记录一下,备忘!

过程:

在系统更改Locale的时候,需要做一些操作。我采用的办法是使用一个BroadcastReceiver,接收ACTION_LOCALE_CHANGE 的广播intent,在onReceive()中做处理。

最初的解决方案,是在主Activity 的onCreate( )函数中,动态注册一个BroadcastReceiver,并在onDestroy( )中,取消注册。后来测试时发现如果退出这个Activity(finish),那么就无法接收广播了,因为此时已经取消注册了。

接着我想可以在生命周期更广的Application 类的onCreate()中来注册,一分析发现也不行:一者虽然生命周期长,但也是有限的,一旦程序完全退出,就收不到广播了。二者,Apllication 类的onTerminate( )不是一定能被调用的,暂时也想不到其他更好的来unregister Receiver的地方。

最后,还是采用静态注册的方式解决了这个问题。

总结:

  1. 动态注册的BroadcastReceiver,使用比较方便,在代码中随时可以加入。但是要注意,必须适时的unregister,否则会有内存泄漏。同时,其生命周期是有限的,在使用时要注意。
  2. 静态注册的BroadcastReceiver,需要在manifest文件中标出,并继承BroadcastReceiver类。此方法生成的对象,只在调用onReceive()时有效,一旦返回,就无效。一定程度上可以认为,此receiver一直有效。
  3. Application对象虽然可以保存一些全局数据,生命周期也比较长,但是在清理数据方面可能会有问题,使用时也要慎重。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值