IntentService

一、IntentService简介
IntentService 是 Service 的子类,比普通的 Service 增加了额外的功能。
先看Service本身存在两个问题:
Service不会专门启动一条单独的进程,Service与它所在应用位于同一个进程中;
Service也不是专门一条新线程,因此不应该在Service 中直接处理耗时的任务;


二、IntentService特征

结论:可以在onHandleIntent方法里执行耗时操作

IntentService是Service的子类。里面专门开辟了一个子线程来进行耗时操作。当任务结束之后,会自动停止,所以不用我们去调用stopService来停止他。IntentService默认为Service提供了onBind()和onStartCommand()方法,所以我们在继承使用IntentService的时候不用再重写这两个方法,而直接使用onHandleIntent(Intent intent)方法即可。

onHandleIntent(Intent intent): 此方法专门开辟了一个子线程来进行耗时操作的处理。并且这个调用耗时操作的方式是以队列的形式进行调用,也就是说如果有多个耗时操作进行处理的时候,他会排队进行操作。

通过源码我们可以看到,在第一次启动IntenService的时候,会去执行onCreate()方法。在onCreate()方法中,程序先去创建了一个HandlerThread线程并且启动了他,然后实现一个继承了Handler的ServiceHandler类,并将HandlerThread的Looper传递给ServiceHandler,由于Looper属于HandlerThread,HadlerThrad又是一个异步线程,当我们把Looper传递给ServicerHandler时,使得ServiceHandler也变成了一个异步执行的线程。
由于是在一个子线程中执行的,这也就解释了为何onHandleIntent()方法里面可以进行耗时操作的原因,因为他本身就是在一个子线程中执行。

 

posted @ 2022-08-29 16:28  随易来了  阅读(58)  评论(0编辑  收藏  举报