Android 之Service与IntentService的比较
来源:互联网 发布:深圳淘宝店铺装修 编辑:程序博客网 时间:2024/06/16 16:08
转自:http://blog.csdn.net/zhf198909/article/details/6906786
不知道大家有没有和我一样,以前做项目或者练习的时候一直都是用Service来处理后台耗时操作,却很少注意到还有个IntentService,前段时间准备面试的时候看到了一篇关于IntentService的解释,发现了它相对于Service来说有很多更加方便之处,今天在这里稍微来总结下我的心得。
首先IntentService是继承自Service的,那我们先看看Service的官方介绍,这里列出两点比较重要的地方:
1.A Service is not a separate process. The Service object itself does not imply it is running in its own process; unless otherwise specified, it runs in the same process as the application it is part of.
2.A Service is not a thread. It is not a means itself to do work off of the main thread (to avoid Application Not Responding errors).
稍微翻一下(英文水平一般)
1.Service不是一个单独的进程 ,它和应用程序在同一个进程中。
2.Service不是一个线程,所以我们应该避免在Service里面进行耗时的操作
关于第二点我想说下,不知道很多网上的文章都把耗时的操作直接放在Service的onStart方法中,而且没有强调这样会出现Application Not Responding!希望我的文章能帮大家认清这个误区(Service不是一个线程,不能直接处理耗时的操作)。
有人肯定会问,那么为什么我不直接用Thread而要用Service呢?关于这个,大家可以网上搜搜,这里不过多解释。有一点需要强调,如果有耗时操作在Service里,就必须开启一个单独的线程来处理!!!这点一定要铭记在心。
IntentService相对于Service来说,有几个非常有用的优点,首先我们看看官方文档的说明:
IntentService is a base class for Services that handle asynchronous requests (expressed as Intents) on demand. Clients send requests throughstartService(Intent) calls; the service is started as needed, handles each Intent in turn using a worker thread, and stops itself when it runs out of work.
This "work queue processor" pattern is commonly used to offload tasks from an application's main thread. The IntentService class exists to simplify this pattern and take care of the mechanics. To use it, extend IntentService and implement onHandleIntent(Intent). IntentService will receive the Intents, launch a worker thread, and stop the service as appropriate.
All requests are handled on a single worker thread -- they may take as long as necessary (and will not block the application's main loop), but only one request will be processed at a time.
1.Service:
2.IntentService:
测试主程序:
- 32楼 yds854163 昨天 18:08发表 [回复]
- 谢楼主~~~~~~ 赞一个!!
- 31楼 sinomike 2014-03-10 17:10发表 [回复]
- 简单明了。。赞~\(≧▽≦)/~
- 30楼 hety163 2014-02-20 10:41发表 [回复]
- Service不是一个线程?应该不是一个子线程吧?既不是线程又不是进程那是什么……
- 29楼 jasoncol_521 2014-01-22 14:07发表 [回复]
- 写的非常好!容易理解!
- 28楼 ghl10979 2014-01-14 13:55发表 [回复]
- 很有帮助,非常感谢!
- 27楼 zqxiaoqiao 2013-12-19 14:56发表 [回复]
- 说的很清楚,感谢楼主!
- 26楼 chshoo 2013-12-12 09:52发表 [回复]
- 非常清晰!支持一下!
- 25楼 happyness_xie 2013-11-26 15:08发表 [回复]
- get
- 24楼 cml_bright 2013-11-13 22:08发表 [回复]
- 简单明了,不错,明白了
- 23楼 Android-Linux 2013-11-12 10:25发表 [回复]
- xuexila
- 22楼 lyfadd85 2013-10-28 09:33发表 [回复]
- 哟西,清晰明了
- Re: lyfadd85 2013-10-28 09:38发表 [回复]
- 回复lyfadd85:不知道有没有提供取消当前队列中未处理的消息,进而处理最新的请求的接口,
- 21楼 裂风 2013-08-13 08:56发表 [回复]
- 表示赞赏。,学习了
- 20楼 tzguo1314 2013-07-02 19:27发表 [回复]
- 写错了, All requests are handled on a single worker thread。
所有的请求都交给唯一的一个工作线程处理。而不是“每一个请求都会在一个单独的worker thread中处理”
- 19楼 yzyeilin 2013-06-24 17:55发表 [回复]
- intentservice的缺点是什么
- 18楼 bt131476 2013-05-03 16:55发表 [回复]
- 简单明了,谢谢分享!
- 17楼 rabbitinhere 2013-05-02 20:57发表 [回复]
- 感谢分享~~学习了
- 16楼 Avin 2013-04-12 15:04发表 [回复]
- 谢谢楼主,理解深刻!用一下就更深刻了!
- 15楼 司马奔 2013-04-01 14:43发表 [回复]
- 楼主写的简洁明了,很容易就理解这个知识点了。谢谢楼主。收藏了
- 14楼 ll397879213 2013-03-21 10:33发表 [回复]
- 不错!!
- 13楼 任付江 2013-01-30 21:31发表 [回复]
- intentService 的优势是什么呢?安全,异步避免anr
- Re: qeqeqe236 2013-04-28 16:59发表 [回复]
- 回复renfujiang: 不用自己处理线程和队列。。
- Re: 人道渺渺 2013-09-14 20:47发表 [回复]
- 回复qeqeqe236:可是楼猪,我在service中可以 开很多线程并发处理,和不会阻塞main线程,不排队效率高。你要是一定喜欢排队也可以自己写个 线程内嵌handler去实现啊。handler就是消息队列机制,这个intentService我咋看咋别扭了,楼猪~~楼主我打了错别字
- Re: seuduck 2013-10-09 17:56发表 [回复]
- 回复joychine:intentservice的实现其实就是service里面起了一个handlerThread,thread的handlemessage调用onHandleIntent函数,所以本质上没什么不一样,有兴趣可以看下源码
- 12楼 点背 2013-01-24 18:26发表 [回复]
- 收藏了
- 11楼 鲁面羊 2012-12-16 12:45发表 [回复]
- 入门好资料,谢谢楼主
- 10楼 逍遥K杰 2012-11-23 09:58发表 [回复]
- IntentService实现了一种排队机制,前一个任务完了之后才能开始下一个任务。而在Service里直接开线程可以同时执行啊,IntentService有何优势呢?
- Re: wangshiming 2013-10-29 10:10发表 [回复]
- 回复keshuangjie:android service 里面是不能开启过多的线程的
- 9楼 瑞雪漫天 2012-11-21 17:03发表 [回复]
- 向你学习,致敬
- 8楼 jorig 2012-11-17 11:38发表 [回复]
- 非常感谢。
- 7楼 zmttpassion 2012-11-09 10:05发表 [回复]
- 多谢亲! 讲的很清楚!受教了!
希望您继续写下去让更多人受益!
- 6楼 ItNoob 2012-11-09 10:04发表 [回复]
- 顶楼主
- 5楼 赤子Anatta 2012-09-11 15:25发表 [回复]
- 学习了~ 谢谢~
- 4楼 huayanlong 2012-08-10 14:59发表 [回复]
- 谢谢楼主,收了……
- 3楼 神流浪 2012-07-27 16:44发表 [回复]
- 谢谢楼主
- 2楼 zozing 2012-05-21 15:09发表 [回复]
- 分析很到位
- 1楼 cmoaciopm 2012-04-24 14:10发表 [回复] [引用] [举报]
- 写的很清晰,多谢楼主!
- Android之Service与IntentService的比较
- Android之Service与IntentService的比较
- Android之Service与IntentService的比较
- Android之Service与IntentService的比较
- Android之Service与IntentService的比较
- Android之Service与IntentService的比较
- Android之Service与IntentService的比较
- Android之Service与IntentService的比较
- Android之Service与IntentService的比较
- Android之Service与IntentService的比较
- Android之Service与IntentService的比较
- Android之Service与IntentService的比较
- Android之Service与IntentService的比较
- Android之Service与IntentService的比较
- Android之Service与IntentService的比较
- Android之Service与IntentService的比较
- Android之Service与IntentService的比较 .
- Android之Service与IntentService的比较
- hdu 1575 Tr A(矩阵操作入门)
- 7. 使用栈实现加减乘除四则运算
- 你的爱情标准是什么
- 最初的梦想
- java ImageIO处理图像的封装
- Android 之Service与IntentService的比较
- c语言-编程位操作技巧
- SQL SERVER 表分区实施步奏
- 接着上一篇(3)
- A标签发送post请求
- iOS 7 在启动期间改变状态栏颜色
- 进程内存布局
- codeforces problem/408/B
- 第八周上机实践项目——Time类中的运算符重载