Android线程交互之IntentService

一、简介

IntentService是一种特殊的Service,它可以进行一些后台的耗时操作,在任务执行结束后会自动停止。由于它是一种服务,所以它的优先级要高于普通的线程,不容易被系统杀死。

内部封装了HandlerThread 和 Handler

二,使用

1、创建IntentService的子类,实现onHandleIntent(@Nullable Intent intent)方法和构造方法

2、在Activity中使用Intent启动服务

Intent mService = new Intent(this,TestIntentService.class);
startService(mService);//可以启动多次

3、 在onHandleIntent中使用传递过来的intent获取值,比如URL。接下来就可以使用URL去做一些耗时操作

4、最后使用发送广播sendBroadcast的形式将结果回传给Activity

三,源码分析

1、onCreate()

IntentService在创建的时候onCreate()方法中会创建一个HandlerThread thread对象,并调用thread.start()启动该线程。调用该HandlerThread的getLooper方法获取到Looper对象:

mServiceLooper = thread.getLooper();

使用mServiceLooper创建Handler对象:

mServiceHandler = new ServiceHandler(mServiceLooper);使得该handler运行在子线程中

2、onStartCommand()

IntentService在onCreate()方法之后会调用onStartCommand方法,在该方法中会调用onStart()方法

3、onStart()

onStart方法中只是使用handler对象的mServiceHandler发送了一条消息

4、ServiceHandler

handler接受到消息后直接调用onHandleIntent方法,由于handler运行在子线程,所以onHandleIntent也是运行在子线程中,所以可以在其中做耗时操作

onHandleIntent执行完成后会调用stopSelf()方法停止服务

5、onDestroy()

在退出服务的时候会调用mServiceLooper.quit()退出Looper

注意:从源码可以看到IntentService内部是使用Handler消息传递处理消息的,是顺序处理消息,这就意味着IntentService也是顺序执行后台任务的。所以当启动多个服务时,这些后台任务是按照顺序的方式来执行的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值