Service IntentService区别 (面试)

原创 2016年06月01日 14:55:42

依然记得自己当初没有真正的工作经验的时候的日子,满北京跑,没有人要。妈的,现在就想问,还有谁!想想真解气。不提了。
曾经有个面试官问我service 和IntentService的区别。当时自己模模糊糊回答。那时候也看过博客,百度过,但是对Android了解的不够深,所以,没有真正理解。现在看了几遍博客懂了,我来谈谈:
1.Service是用于后台服务的,当应用程序被挂到后台的时候,问了保证应用某些组件仍然可以工作而引入了Service这个概念,那么这里面要强调的是Service不是独立的进程,也不是独立的线程,它是依赖于应用程序的主线程的,也就是说,在更多时候不建议在Service中编写耗时的逻辑和操作,否则会引起ANR。
也就是,service里面不可以进行耗时的操作。虽然在后台服务。但是也是在主线程里面。
2.当我们编写的耗时逻辑,不得不被service来管理的时候,就需要引入IntentService,IntentService是继承Service的,那么它包含了Service的全部特性,当然也包含service的生命周期,那么与service不同的是,IntentService在执行onCreate操作的时候,内部开了一个线程,去你执行你的耗时操作。

使用:
重写protected abstract void onHandleIntent(Intent intent);

IntentService是一个通过Context.startService(Intent)启动可以处理异步请求的Service,使用时你只需要继承IntentService和重写其中的onHandleIntent(Intent)方法接收一个Intent对象,在适当的时候会停止自己(一般在工作完成的时候)。所有的请求的处理都在一个工作线程中完成,它们会交替执行(但不会阻塞主线程的执行),一次只能执行一个请求。

这是一个基于消息的服务,每次启动该服务并不是马上处理你的工作,而是首先会创建对应的Looper,Handler并且在MessageQueue中添加的附带客户Intent的Message对象,当Looper发现有Message的时候接着得到Intent对象通过在onHandleIntent((Intent)msg.obj)中调用你的处理程序,处理完后即会停止自己的服务,意思是Intent的生命周期跟你的处理的任务是一致的,所以这个类用下载任务中非常好,下载任务结束后服务自身就会结束退出。

总结IntentService的特征有:

(1)会创建独立的worker线程来处理所有的Intent请求;

(2)会创建独立的worker线程来处理onHandleIntent()方法实现的代码,无需处理多线程问题;

(3)所有请求处理完成后,IntentService会自动停止,无需调用stopSelf()方法停止Service;

版权声明:本文为曹四爷原创文章,未经四爷允许不得转载。

相关文章推荐

Android开发之Service与IntentService的区别与使用场景

转载自:点击打开链接 Service Service 是长期运行在后台的应用程序组件。 Service 不是一个单独的进程,它和应用程序在同一个进程中,Service 也不是一个线程...

Android笔记 IntentService与Service的区别

Service 在官方API(http://developer.android.com/reference/android/app/Service.htmlhttp://developer.andro...
  • cuiran
  • cuiran
  • 2015年02月27日 12:14
  • 11552

IntentService与Service用法区别

该博客来自网络——————>> 稍微翻译理一理,这里主要是说IntentServic 不知道大家有没有和我一样,以前做项目或者练习的时候一直都是用Service来处理后台耗时操作,却很...

Android开发之Service和IntentService中显示Toast的区别

1. 表象 Service中可以正常显示Toast,IntentService中不能正常显示Toast,在2.3系统上,不显示toast,在4.3系统上,toast显示,但是不会消失。 ...

android开发步步为营之60:IntentService与Service的区别

这个面试的时候,相信是面试官最爱的问题之一。简单的来说,IntentService继承至Service,Service和Acitivity一样是依附于应用主进程的,它本身不是一个进程或者一个线程。一些...

Android开发之Service与IntentService的区别与使用场景(源代码剖析)

因为最大部分的service不需要同时处理多个请求(处理多个请求是一个比较危险的多线程的场景),这样在在这种情况下呢,最好使用IntentService类如果你实现你的服务。   使用intentSe...

Service与 IntentService 的区别与使用场景(源代码剖析)

1)IntentService是继承自Service的 (2)1.Service不是一个单独的进程 ,它和应用程序在同一个进程中。         2.Service不是一个线程,所以我们...

Service和IntentService的区别

Service和IntentService的区别 1. 首先IntentService是继承自Service; 2. Service不是一个单独的进程,它和应用程序在同一个进程中; 3. Ser...

Android中 IntentService 与 Service 的区别

Android中的Service是用于后台服务的,当应用程序被挂到后台的时候,问了保证应用某些组件仍然可以工作而引入了Service这个概念,那么这里面要强调的是Service不是独立的进程,也不是独...

Service和IntentService关系与区别

Service和IntentService关系与区别
  • qqGrid
  • qqGrid
  • 2014年12月10日 14:00
  • 394
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Service IntentService区别 (面试)
举报原因:
原因补充:

(最多只允许输入30个字)