您的位置:首页 > 移动开发 > Android开发

为什么不建议在广播中启动一个线程做任务

2016-12-22 18:50 239 查看
首先需要知道:

1,这里所说的广播是静态广播

2,广播是运行在ui线程,阻塞15s会ANR

3,当android程序第一次运行时会启动一个进程和一个ui线程(不考虑多进程,多线程等)

一个未运行的程序接受到一个广播后的流程:

1,启动程序进程

2,启动ui线程和调用广播的 onReceive(Context context, Intent intent)方法

3,onReceive方法返回后,进程和线程处于等待状态;系统任意时刻可以终止和回收该线程和进程占有资源(内存)

如果:在onReceive开启一个线程做任务,任务未做完系统有可能回收进程,做任务的线程就没有对应的进程上下文,会被回收,任务就有可能未完成。

所以建议在onReceive中启动一个服务(再在服务中开线程做任务)做长时间任务。这样程序进程为后台进程(没有使用startForeground)系统就不会任意时刻回收此进程
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android