2
回答
BroadcastReceiver anr
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   

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

举报
Eason/余春
发帖于6年前 2回/638阅
共有2个答案 最后回答: 5年前

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

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

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

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