一般我们所使用的Service是运行在主线程当中的,所以在Service里面编写耗时的操作代码,会造成主线程卡顿会ANR。为了解决这样的问题,谷歌引入了IntentService。

如果有一个任务,可以分成很多个子任务,需要按照顺序来完成,如果需要放到一个服务(Service)中完成,那么使用IntentService是最好的选择。

一、IntentService的优点

(1)它创建一个独立的工作线程来一个一个处理所有Intent。

(2)创建了一个工作队列,来逐个发送Intent给onHandleIntent()

(3)不需要主动调用stopSelf()来结束服务,因为源码里面自己实现了自动关闭。

(4)默认实现了onBind()返回的null。

(5)默认实现了onStartCommand()方法,目的是将intent插入到工作队列。

总结:(使用IntentService的好处)首先,省去了手动开线程的麻烦;第二,不用手动停止Service;第三,由于设计了工作队列,可以启动多次startService(),但是只有一个Service实例和一个工作线程。按顺序一个一个执行。

二、IntentService原理及作用

1、原理

IntentService是继承Service的一个抽象类,它在onCreate()方法中创建了一个HandlerThread,并启动该线程。HandlerThread是带有自己消息队列和Looper的线程,根据HandlerThread的looper创建一个Handler,这样IntentService的ServiceHandler的HandleMessage()方法就运行在子线程中。HandleMessage中调用了onHandleIntent()方法,它是一个抽象方法,继承IntentService类需要实现该方法,把耗时操作放在onHandleIntent()方法中,等耗时操作运行完成后,会调用stopSelf()方法,服务会调用onDestory()方法消毁自己。如果onHandleIntent()方法中的耗时操作未运行完前就调用了stopSelf()方法,服务调用onDestory()方法,但耗时操作会继续运行,直至运行完毕。如果同时多次启动IntentService,任务会放在一个队列中,onCreate()和onDestory()方法都只会运行一次。

2、作用

用来处理后台耗时操作,如读取数据库或是本地文件等。

android服务的原理,Android学习笔记:IntentService相关推荐

  1. android服务的原理,android service原理

    整体考虑: 两种方式启动服务startService和bindService. startService方式,不需要service返回数据,通过AMS将数据转发给Service即可,异步.简化考虑,A ...

  2. Android Jetpack Components of LiveData 学习笔记

    Android Jetpack Components of Lifecycle 学习笔记 Android Jetpack Components of LiveData 学习笔记 Android Jet ...

  3. Android Jetpack Components of ViewModel 学习笔记

    Android Jetpack Components of Lifecycle 学习笔记 Android Jetpack Components of LiveData 学习笔记 Android Jet ...

  4. Android开源项目SlidingMenu本学习笔记(两)

    我们已经出台SlidingMenu使用:Android开源项目SlidingMenu本学习笔记(一个),接下来再深入学习下.依据滑出项的Menu切换到相应的页面 文件夹结构: 点击Bluetooth能 ...

  5. 深入浅出图神经网络|GNN原理解析☄学习笔记(四)表示学习

    深入浅出图神经网络|GNN原理解析☄学习笔记(四)表示学习 文章目录 深入浅出图神经网络|GNN原理解析☄学习笔记(四)表示学习 表示学习 表示学习的意义 离散表示与分布式表示 端到端学习 基于重构损 ...

  6. 分布式系统服务注册与发现原理 SpringCloud 学习笔记

    分布式系统服务注册与发现原理 & SpringCloud 学习笔记 分布式系统服务注册与发现原理 引入服务注册与发现组件的原因 单体架构 应用与数据分离 集群部署 微服务架构 架构演进总结 服 ...

  7. HTML4基本编译原理,Stanford公开课《编译原理》学习笔记(1~4课)

    课程里涉及到的内容讲的还是很清楚的,但个别地方有点脱节,任何看不懂卡住的地方,请自行查阅经典著作<Compilers--priciples, Techniques and Tools>(也 ...

  8. android服务无法启动,Android服务无法启动(Android service would't start)

    Android服务无法启动(Android service would't start) 我正在尝试在Android中实现简单的服务,但我无法统计基本服务. 这是我的主要课程: import java ...

  9. Word2vec原理+实战学习笔记(二)

    来源:投稿 作者:阿克西 编辑:学姐 前篇:Word2vec原理+实战学习笔记(一)​​​​​​​ 视频链接:https://ai.deepshare.net/detail/p_5ee62f90022 ...

最新文章

  1. 理解 IEnumerable 与 IEnumerator
  2. Linux 操作系统原理 — 多处理器架构
  3. Entity Framework 4.1 DbContext使用记之二——如何玩转本地实体? DbSet.Local属性的使用与实现...
  4. JSP+Servlet+Ajax实现用户增删改查的例子
  5. JavaScript 技术篇-chrome浏览器读取剪切板命令document.execCommand(‘paste‘)返回false原因及解决方法
  6. java类加载体系,Java类加载体系
  7. 亚马逊、Facebook、Google 等科技公司为何越来越难招到人了?
  8. jQuery1.9.1源码分析--Animation模块
  9. mysql事务和锁 SELECT FOR UPDATE
  10. 【qq语音获取好友ip】wireshark
  11. android电池管理软件,四款安卓手机电池管理软件横测
  12. 本特利传感器9200-01-05-10-00
  13. linux asio,在Linux使用Asio:不可或缺的WineASIO
  14. TP5.1导出指定的多个日期的数据记录
  15. 详解 欧拉角与四元数
  16. 深度学习MatConvNet安装
  17. ppt文件太大怎么压缩变小?
  18. text mesh pro html,TextMesh Pro 超链接解析失败
  19. js中浏览器失焦获焦的几种结局方法
  20. 05 共识问题:区块链如何确认记账权?

热门文章

  1. 如何区分abcd类地址_IP地址中A类、B类、C类地址的区别
  2. linux dmesg命令(显示开机信息)
  3. python pip如何安装wheel文件?.whl(pip install [wheel])
  4. Test_data detection-Illumination
  5. Elections 思维
  6. 数字三角形,最长上升子序列,背包模型 AcWing算法提高课 (详解)
  7. Nginx教程系列四:实现反向代理配置
  8. web工程中集成cas单点登录
  9. tomcat的安装和部署项目
  10. QT5.11 + VS2017 环境搭建