其他分享
首页 > 其他分享> > IntentService与HandlerThread的工作原理(个人笔记)

IntentService与HandlerThread的工作原理(个人笔记)

作者:互联网

IntentService与HandlerThread

IntentService

IntentService是Service的一个子类,为Android开发者提供了一个方便的在工作线程中执行的Service。

为什么需要IntentService

1.Service的缺陷。 android的Service默认在主线程中执行,但是Service的初衷是在后台执行耗时操作,但是主线程中执行耗时操作会使界面卡顿,所以这是一个悖论,我们开发者只能自己去创建工作线程执行任务,但是如果自己创建了工作线程就得自己去管理,所以凭空产生了很多问题。耗费开发者精力
2. 改进方法。这样Android就为我们封装了一个在工作线程中执行的Service,方便我们使用。我们只需要在onHandleIntent的回调中执行耗时操作就可以了。

IntentService如何实现

实现的基本思路:封装一个在工作线程中执行的Handler。一切以源码来分析

1.需要的重要基本组件。

一个在工作线程中执行的Handler
在这里插入图片描述
2.切换线程

在onStartCommand中将intent通过handler发送到子线程处理。
在这里插入图片描述

其实大体思路很简单,就这样就可以完成IntentService的主要框架了。我们查看源码也可以发现,IntentService对于Service的封装也只是有区区的几百行代码。但是这里面有几个细节需要注意

在这里插入图片描述

我们看到了,这其实是一个很简易的过程,无论是从思路和代码实现上。但是我们也发现了,对IntentService的每一次启动,都会进入handler事件队列,所以我们不用担心多线程造成的事件序列混乱。而且每一次处理完事件都会自己调用stopSelf来销毁Serivce,所以也无需管理Service的生命周期。

在这里插入图片描述

HandlerThread是什么?

1.是一个Thread的子类。
HandlerThread是一个Thread的直接子类。说明它的主要功能就是作为一个线程存在,一个工作线程。
在这里插入图片描述

2.封装了Looper
它的作用就是方便为工作线程创建handler所需要的looper环境。所以它需要创建Looper,开启Looper,退出Looper。除此之外,无其他特殊功能。
在这里插入图片描述
获取Looper方法。
在这里插入图片描述
退出Looper方法
在这里插入图片描述

总结

IntentService与HandlerThread是两个极其简单但是又非常有用的类。可以减少我们的工作量。

WuRuiF 发布了124 篇原创文章 · 获赞 56 · 访问量 19万+ 私信 关注

标签:Service,笔记,HandlerThread,IntentService,Handler,线程,Looper
来源: https://blog.csdn.net/sinat_31311947/article/details/104130990