为什么不能直接在BroadCastReceiver中开一个线程执行耗时任务
来源:互联网 发布:中国投资咨询公司 知乎 编辑:程序博客网 时间:2024/05/20 04:48
BroadCastReceiver的生命周期非常简短:接收到广播→onReceive()→结束;
所以在onReceive方法中,不要执行耗时的任务,如果该方法执行时间超过10秒,Android就会认为该程序无响应,并弹出ANR的对话框。如果必须执行耗时任务可以考虑,在onReceive中开启服务来执行,但不要使用线程,因为BroadCastReceiver的生命周期很短,可能出现子线程还没有结束,BroadCastReceiver就已经退出了。
如果当BroadCastReceiver所在的进程结束,虽然该进程中可能有用户启动的新线程,但是由于该进程内没有活动的组件,系统会在内存紧张的时候,优先结束掉该进程,这就会导致BroadCastReceiver启动的子线程不能执行完。
转载地址
阅读全文
0 0
- 为什么不能直接在BroadCastReceiver中开一个线程执行耗时任务
- 如何在 BroadcastReceiver 中执行耗时操作?
- 为什么不能在BroadcastReceiver中开启子线程
- 利用IntentService实现在broadcastreceiver中比较耗时的任务
- 为什么说invalidate()不能直接在线程中调用
- android 直接在activity/broadcast receiver中启动子线程来处理长时间的耗时任务不行吗?
- 为什么在一个线程中不能调用显示另一个窗体?
- 在BroadCastReceiver的onReceive方法中执行耗时操作的正确姿势
- 在BroadCastReceiver的onReceive方法中执行耗时操作的正确姿势到底是什么
- Activity生命周期详解(为什么不能在onPause里执行耗时操作)
- Android中为什么主线程更新UI,子线程执行耗时操作?
- android.view.ViewRootImpl$CalledFromWrongThreadException:Android2.3后耗时线程不可以在UI线程中执行
- 为什么不建议在广播中启动一个线程做任务
- 为什么不建议在广播中启动一个线程做任务
- 为什么有的表在Navicat中不能直接复制
- 在VC++中直接调用API执行打印任务
- 调用线程对象的start()方法会执行run(),为什么不能直接调用run()方法??
- 最简单解决c#在UI线程中执行耗时方法导致界面假死的方法
- 自学Java之Java编程(读写RSS Feed)(019day)
- 图片选择器--AndroidImagePicker
- ORACLE 12C 安装过程相关报错及解决方案
- 图片轮播--AndroidImageSlider
- android--自定义view
- 为什么不能直接在BroadCastReceiver中开一个线程执行耗时任务
- LintCode 解题记录 Array 17.6.5
- 更改nginx网站根目录
- ACM:F: ACM小组的成绩排名
- 自学Java之Java编程(XML Web服务)(020day)
- Linux 内核源码(kernel source)
- 位运算实现加减乘除
- 【MyEclipse】设置作者信息等
- python学习笔记2