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不需要同时处理多个请求(处理多个请求是一个比较危险的多线程的场景),这样在在这种情况下呢,最好使用IntentService类如果你实现你的服务。   使用intentSe...
  • u013900875
  • u013900875
  • 2014年04月07日 12:46
  • 8788

在IntentService中使用Toast与在Service中使用Toast的异同

Toast要求运行在UI主线程中,所以要想Toast能够正常工作那个必须把它发到UI线程中。 Service运行在主线程中,因此Toast是正常的。 IntentService运行在独立的...
  • fengyuzhengfan
  • fengyuzhengfan
  • 2014年07月26日 17:44
  • 2193

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

转载自:点击打开链接 Service Service 是长期运行在后台的应用程序组件。 Service 不是一个单独的进程,它和应用程序在同一个进程中,Service 也不是一个线程...
  • lyj1005353553
  • lyj1005353553
  • 2016年12月14日 21:50
  • 2012

IntentService与Service的区别以及使用场景

http://rainbow702.iteye.com/blog/1143286 http://blog.csdn.net/gerogelin/article/details/23097013 ...
  • oLevin
  • oLevin
  • 2016年07月22日 14:01
  • 1178

Android 多线程之IntentService 完全详解

转载请注明出处(万分感谢!): http://blog.csdn.net/javazejian/article/details/52334098 出自【zejian的博客】 关联文章: A...
  • javazejian
  • javazejian
  • 2016年09月04日 07:58
  • 7942

android中Service的基本用法和IntentService的使用

至于Service是什么此,相信大家都有一定的了解,篇也不多做概述了。 此篇主要是讲一下Service的基本用法和IntentService的使用。 首先是说一下Service中主...
  • Double2hao
  • Double2hao
  • 2015年11月06日 10:11
  • 2791

Service生命周期和启动方法以及IntentService

通过StartService启动Service,当访问者退出时,Service仍然能运行,访问者与Service之间没有关联。而bindService,访问者与服务绑定,访问者一旦退出,服务也终止。 ...
  • rabbit_in_android
  • rabbit_in_android
  • 2015年11月16日 09:20
  • 4302

深入理解Service(三)——前台服务和IntentService

在深入理解Service(一)——服务生命周期中解释了Service的生命周期,在深入理解Service(二)——绑定服务中解释了如何绑定服务,IPC机制,在本篇博客中将谈论服务的另两个常见用法:前台...
  • qq_19431333
  • qq_19431333
  • 2017年01月04日 09:14
  • 600

IntentService的实际应用场景

IntentService相比父类Service而言,最大特点是其回调函数onHandleIntent中可以直接进行耗时操作,不必再开线程。其原理是IntentService的成员变量 Handler...
  • zhengyin_tmac
  • zhengyin_tmac
  • 2016年09月06日 09:12
  • 1079

IntentService介绍及使用

IntentService是一个通过Context.startService(Intent)启动可以处理异步请求的Service,使用时你只需要继承IntentService和重写其中的onHandl...
  • nalw2012
  • nalw2012
  • 2016年02月25日 18:19
  • 3259
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Service IntentService区别 (面试)
举报原因:
原因补充:

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