Activity、BroadcastReceiver、Service,只要是有长时间处理的任务,就需要重新开一个线程?!
2012-08-23 13:27
441 查看
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。/article/4385811.html
上一篇文章中,傻蛋提到了BroadcastReceiver是Android中最轻薄、最短小的组件,它的对象生命周期十分短暂,经过傻蛋测试在BroadcastReceiver中让线程睡眠10秒(Activity是5秒钟)的话,Android就会弹出错误(和Activity超时的错误相同),同时需要注意的是Activity、Service和BroadcastReceiver都是运行在本进程的主线程里面的。通过这个测试让傻蛋进一步产生了疑问,如果在Service中处理一个长时间的任务会怎么样?
启动一个Service,然后在Service的onCreate()方法中添加如下代码:
单就是让Service睡眠20秒钟,我们会发现,sleep start…. 和 sleep end….这两个日志打印出来了,但是后台还会出现如下错误,前台弹出no response超时对话框。
当傻蛋在onCreate()中新启动一个线程来,睡眠时,程序正常。
所以总结一下:无论是 Activity、BroadcastReceiver还是Service,只要是有长时间处理的任务,就需要重新开一个线程来处理,为什么会这样?因为他们都是运行在主线程中的。
在使用BroadcastReceiver时还有一个我们需要注意的:在BroadcastReceiver的onReceive(Context context , Intent intent )这第一个context到底是哪一个context?是Activity还是Application?通过傻蛋测试发现:
如果你的BroadcastReceiver是通过在Activity中的this.registerReceiver(myBroadcaster, filter); 来注册的话,那么这个context就是这个Activity,而如果是通过AndroidManifest来注册的话,那么这个context就是:android.app.ReceiverRestrictedContext。
本文出自 “傻蛋的博客” 博客,请务必保留此出处/article/4385811.html
上一篇文章中,傻蛋提到了BroadcastReceiver是Android中最轻薄、最短小的组件,它的对象生命周期十分短暂,经过傻蛋测试在BroadcastReceiver中让线程睡眠10秒(Activity是5秒钟)的话,Android就会弹出错误(和Activity超时的错误相同),同时需要注意的是Activity、Service和BroadcastReceiver都是运行在本进程的主线程里面的。通过这个测试让傻蛋进一步产生了疑问,如果在Service中处理一个长时间的任务会怎么样?
启动一个Service,然后在Service的onCreate()方法中添加如下代码:
try { Log.v(TAG , "sleep start ….."); Thread.sleep(20000); Log.v(TAG,"sleep end ….."); } catch (InterruptedException e) { / / TODO Auto-generated catch block e.printStackTrace(); }
单就是让Service睡眠20秒钟,我们会发现,sleep start…. 和 sleep end….这两个日志打印出来了,但是后台还会出现如下错误,前台弹出no response超时对话框。
当傻蛋在onCreate()中新启动一个线程来,睡眠时,程序正常。
所以总结一下:无论是 Activity、BroadcastReceiver还是Service,只要是有长时间处理的任务,就需要重新开一个线程来处理,为什么会这样?因为他们都是运行在主线程中的。
在使用BroadcastReceiver时还有一个我们需要注意的:在BroadcastReceiver的onReceive(Context context , Intent intent )这第一个context到底是哪一个context?是Activity还是Application?通过傻蛋测试发现:
如果你的BroadcastReceiver是通过在Activity中的this.registerReceiver(myBroadcaster, filter); 来注册的话,那么这个context就是这个Activity,而如果是通过AndroidManifest来注册的话,那么这个context就是:android.app.ReceiverRestrictedContext。
本文出自 “傻蛋的博客” 博客,请务必保留此出处/article/4385811.html
相关文章推荐
- android 直接在activity/broadcast receiver中启动子线程来处理长时间的耗时任务不行吗?
- Activity,Service,BroadcastReceiver和ContentProvider都在(应用主进程的)主线程(UI线程)
- 线程相关——HandlerThread、IntentService、ResultReceiver:结果接收者、AsyncTask:异步任务、Android中处理线程间通信的方式
- 为什么不能直接在BroadCastReceiver中开一个线程执行耗时任务
- Android的Activity启动长时间的操作开启一个Service比开启一个线程好
- 四大组件Activity、Service、BroadcastReceiver、ContentProvider总结
- Android实训课程之三 这次课老师先是提到了Android有四大组件:Activity、Service、Broadcast Receiver、Content Provider。然后重点提到Acti
- Service、BroadcastReceiver、Activity之间的通信
- android四大组件(总结)activity、service、content provider、broadcast receiver
- 关于使用handler与BroadcastReceiver机制来处理动态改变U线程组件
- activity启动service需要注意的一个地方
- Android 四大组件(Activity、Service、BroadCastReceiver、ContentProvider)
- Android Service、Activity、BroadcastReceiver简单使用
- Android中启动一个Service和广播接受者BroadcastReceiver,用于随时观察网络情况
- 简要解释一下activity、 intent 、intent filter、service、Broadcast、BroadcaseReceiver
- android 组件(activity,service,content provider,broadcast receiver,intent)详解
- Android 四大组件(Activity、Service、BroadCastReceiver、ContentProvider)
- (转)Android:Activity/Service/Broadcast Receiver/Content Provider
- 线程系列02,多个线程同时处理一个耗时较长的任务以节省时间
- Android 知识点(Activity,Service,BroadcastReceiver)