android 直接在activity/broadcast receiver中启动子线程来处理长时间的耗时任务不行吗?
2014-05-13 22:40
537 查看
如果开发者需要在Service处理耗时任务,建议在Service中另外启动一条新线程来处理该耗时任务.就像前面BindService中看到的,程序在BindService中的onCreate()方法中启动了一条新线程来处理耗时任务.可能有读者感到疑惑:直接在其他程序组件中启动子线程来处理耗时任务不行吗?这种方式也不可靠,由于activity可能会被用户退出,Broadcast
Receiver的生命周期本身就很短.可能出现的情况是:在子线程还没有结束的情况下.Activity已经被用户退出了,或者BroadcastReceiver已经结束了.在Activity已经退出、BroadcastReceiver已经结束的情况下,此时它们所在的进程就变成了空进程(没有任何活动组件的进程),系统需要内存时可能会优先终止该进程.如果宿主进程被终止,那么该进程内的所有子线程也会被中止,这样就可能导致子线程无法执行完成.
摘自:疯狂android讲义 第二版 pdf P495
Receiver的生命周期本身就很短.可能出现的情况是:在子线程还没有结束的情况下.Activity已经被用户退出了,或者BroadcastReceiver已经结束了.在Activity已经退出、BroadcastReceiver已经结束的情况下,此时它们所在的进程就变成了空进程(没有任何活动组件的进程),系统需要内存时可能会优先终止该进程.如果宿主进程被终止,那么该进程内的所有子线程也会被中止,这样就可能导致子线程无法执行完成.
摘自:疯狂android讲义 第二版 pdf P495
相关文章推荐
- Activity、BroadcastReceiver、Service,只要是有长时间处理的任务,就需要重新开一个线程?!
- 为什么不能直接在BroadCastReceiver中开一个线程执行耗时任务
- 线程相关——HandlerThread、IntentService、ResultReceiver:结果接收者、AsyncTask:异步任务、Android中处理线程间通信的方式
- Android之Activity ContentProvider Service Broadcast,线程间通信,AIDL(一)
- Android中Activity与Service通信——Broadcast、Receiver、Intent、Bundle
- Android 编程五要诀:Activity、Service、BroadcastReceiver、ContentProvider、Intent
- BroadcastReceiver处理耗时操作
- Android之Activity ContentProvider Service Broadcast,线程间通信,AIDL(二)
- 关于使用handler与BroadcastReceiver机制来处理动态改变U线程组件
- (转)Android:Activity/Service/Broadcast Receiver/Content Provider
- Android之Activity ContentProvider Service Broadcast,线程间通信,AIDL(三)
- Android四大组件:Activity、Service、Broadcast Receiver、Content Provider
- 一、概述 EventBus是一款针对Android优化的发布/订阅事件总线。主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间
- Android_03--四大组件_Activity+BroadcastReceiver+service+ContentProvider
- Android 如何在service和BroadCastReceiver中 启动activity和alertdialog?
- Android应用程序模块详解(任务、启动模式、进程和线程、FLAG_ACTIVITY_NEW_TASK)
- android四大组件(总结)activity、service、content provider、broadcast receiver
- Android 四大组件(Activity、Service、BroadCastReceiver、ContentProvider)
- android中“后台”更新Activity的办法(application handler和BroadcastReceiver)
- Android的广播事件处理Broadcast Receiver