Android知识,Tinker,Hybrid,组件化,AOP,OKHttp,Jetpack...

IntentService&FutureTask

2019-03-03  本文已影响6人  小红军storm

目录
1、IntentServic是什么及作用
2、IntentService的架构
3、IntentService源码分析
4、FutureTask是什么
5、FutureTask源码分析

1、IntentServic是什么及作用

IntentService是一个特殊的service。
特殊两点:
(1)在其运行过程中会自动开启子线程中执行耗时任务;
(2)所有任务执行完成之后会自动停止。

2、IntentService的架构

IntentService底层需要HandlerThread和handler做支撑

3、IntentService源码分析

HandlerThread是一个可以构造handler的thread,在其run方法中使用 Looper.prepare();向当前线程添加了一个looper,然后调用Looper.loop(); 开启消息循环。

在IntentService的onCreate方法中构造了一个HandlerThread,并获取这个HandlerThread中的looper,构造了一个ServiceHandler,在IntentService的onStart方法中通过在oncreate方法中构造的ServiceHandler将启动IntentService的intent进行包装之后发送到HandlerThread中进行处理,这样处理的流程就切换到子线程中,在ServiceHandler的handleMessage中首先调用了onHandleIntent方法执行耗时任务,然后调用了stopSelf等待所有任务完成之后就关闭自己。

startId:A unique integer representing this specific request to start
表示此特定启动请求的唯一整数

stopSelf(int startId):

 在其参数startId跟最后启动该service时生成的ID相等时才会执行停止服务。

stopSelf():直接停止服务。

使用场景:

 如果同时有多个服务启动请求发送到onStartCommand(),不应该在处理完一个请求后调用stopSelf();因为在调用此函数销毁service之前,可能service又接收到新的启动请求,如果此时service被销毁,新的请求将得不到处理。此情况应该调用stopSelf(int startId)。请参见:IntentService

public void onDestroy() {
mServiceLooper.quit();
}
stopSelf service之后会回到其onDestroy方法,在onDestroy方法中调用mServiceLooper.quit去清除构造它的队列中的所有消息,所有停止服务后,后续消息不能执行。

4、FutureTask是什么

5、FutureTask源码分析

上一篇下一篇

猜你喜欢

热点阅读