BroadcastReceiver anr

Eason/余春 发布于 2012/04/19 10:18
阅读 813
收藏 0

请问各位大侠,broadcastreveiver静态注册和动态注册两种方式有什么区别?小弟做了个实验,静态注册的broadcastreveiver中如果运行超过10秒将产生anr,而动态注册超过10秒就不会产生anr。

加载中
0
幽灵草
幽灵草

静态注册是在程序清单(AndroidManifest.xml)中注册的,动态注册是使用代码注册的.

静态注册和动态注册最直接的区别是,静态注册不论程序是否启动都将响应相应的广播,而动态注册只有在程序运行并注册后才会接收并响应响应的广播.

另外广播响应要求在10内处理完成,不然就会触发anr,你可以在广播处理中用线程来处理一些比较费时的操作.

Eason/余春
Eason/余春
非常感谢你的回答。请问静态注册的BroadcastReceiver是不是有自己的线程,而动态注册则是运行在UI线程呢?另外我看Android官网上说不要在broadcastreceiver里面使用子线程,而应该用service。不知道两种注册方式是不是生命周期是不一样的?
0
幽灵草
幽灵草
广播的最长执行时间是10秒,即如果十秒不响应,系统就会出现 anr, 为此一般将需要长时间处理的东西放到服务里,让服务在后台运行,最典型的就是歌曲播放
返回顶部
顶部