android服务的原理,Android学习笔记:IntentService
一般我们所使用的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相关推荐
- android服务的原理,android service原理
整体考虑: 两种方式启动服务startService和bindService. startService方式,不需要service返回数据,通过AMS将数据转发给Service即可,异步.简化考虑,A ...
- Android Jetpack Components of LiveData 学习笔记
Android Jetpack Components of Lifecycle 学习笔记 Android Jetpack Components of LiveData 学习笔记 Android Jet ...
- Android Jetpack Components of ViewModel 学习笔记
Android Jetpack Components of Lifecycle 学习笔记 Android Jetpack Components of LiveData 学习笔记 Android Jet ...
- Android开源项目SlidingMenu本学习笔记(两)
我们已经出台SlidingMenu使用:Android开源项目SlidingMenu本学习笔记(一个),接下来再深入学习下.依据滑出项的Menu切换到相应的页面 文件夹结构: 点击Bluetooth能 ...
- 深入浅出图神经网络|GNN原理解析☄学习笔记(四)表示学习
深入浅出图神经网络|GNN原理解析☄学习笔记(四)表示学习 文章目录 深入浅出图神经网络|GNN原理解析☄学习笔记(四)表示学习 表示学习 表示学习的意义 离散表示与分布式表示 端到端学习 基于重构损 ...
- 分布式系统服务注册与发现原理 SpringCloud 学习笔记
分布式系统服务注册与发现原理 & SpringCloud 学习笔记 分布式系统服务注册与发现原理 引入服务注册与发现组件的原因 单体架构 应用与数据分离 集群部署 微服务架构 架构演进总结 服 ...
- HTML4基本编译原理,Stanford公开课《编译原理》学习笔记(1~4课)
课程里涉及到的内容讲的还是很清楚的,但个别地方有点脱节,任何看不懂卡住的地方,请自行查阅经典著作<Compilers--priciples, Techniques and Tools>(也 ...
- android服务无法启动,Android服务无法启动(Android service would't start)
Android服务无法启动(Android service would't start) 我正在尝试在Android中实现简单的服务,但我无法统计基本服务. 这是我的主要课程: import java ...
- Word2vec原理+实战学习笔记(二)
来源:投稿 作者:阿克西 编辑:学姐 前篇:Word2vec原理+实战学习笔记(一) 视频链接:https://ai.deepshare.net/detail/p_5ee62f90022 ...
最新文章
- 理解 IEnumerable 与 IEnumerator
- Linux 操作系统原理 — 多处理器架构
- Entity Framework 4.1 DbContext使用记之二——如何玩转本地实体? DbSet.Local属性的使用与实现...
- JSP+Servlet+Ajax实现用户增删改查的例子
- JavaScript 技术篇-chrome浏览器读取剪切板命令document.execCommand(‘paste‘)返回false原因及解决方法
- java类加载体系,Java类加载体系
- 亚马逊、Facebook、Google 等科技公司为何越来越难招到人了?
- jQuery1.9.1源码分析--Animation模块
- mysql事务和锁 SELECT FOR UPDATE
- 【qq语音获取好友ip】wireshark
- android电池管理软件,四款安卓手机电池管理软件横测
- 本特利传感器9200-01-05-10-00
- linux asio,在Linux使用Asio:不可或缺的WineASIO
- TP5.1导出指定的多个日期的数据记录
- 详解 欧拉角与四元数
- 深度学习MatConvNet安装
- ppt文件太大怎么压缩变小?
- text mesh pro html,TextMesh Pro 超链接解析失败
- js中浏览器失焦获焦的几种结局方法
- 05 共识问题:区块链如何确认记账权?