首先需要知道:
1,这里所说的广播是静态广播
2,广播是运行在ui线程,阻塞15s会ANR
3,当android程序第一次运行时会启动一个进程和一个ui线程(不考虑多进程,多线程等)
一个未运行的程序接受到一个广播后的流程:
1,启动程序进程
2,启动ui线程和调用广播的 onReceive(Context context, Intent intent)方法
3,onReceive方法返回后,进程和线程处于等待状态;系统任意时刻可以终止和回收该线程和进程占有资源(内存)
如果:在onReceive开启一个线程做任务,任务未做完系统有可能回收进程,做任务的线程就没有对应的进程上下文,会被回收,任务就有可能未完成。
所以建议在onReceive中启动一个服务(再在服务中开线程做任务)做长时间任务。这样程序进程为后台进程(没有使用startForeground)系统就不会任意时刻回收此进程
广播开线程为什么不可取
最新推荐文章于 2022-11-23 16:27:38 发布