IntentService源码分析
2018-09-16 本文已影响0人
愤怒的板蓝根
首先 先上图
这里面的方法其实不多 我们先来一个一个的看 首先是ServiceHandler
它继承Handler 然后再handleMEssage中 处理方法 onHandleIntent 是一个抽象方法 这个方法的解释是 一次只执行一个任务不会像service一样 有多个后台服务 我们接着往下看
这个方法里面使用了一个HandlerTread (可以看我关于HandlerTread的源码分析)线程来处理这些任务
重写了这些方法 先从STAR方法说起 通过HANDLER的享元设计模式 获取了一个MESSAGE对象然后发送消息
第二个 onStartCommand方法 做了一个判断 第一个表示如果service进程被kill掉,保留service的状态为开始状态,但不保留递送的intent对象。随后系统会尝试重新创建service,由于服务状态为开始状态,所以创建服务后一定会调用onStartCommand(Intent,int,int)方法。如果在此期间没有任何启动命令被传递到service,那么参数Intent将为null。
第二个的常量 解释为 “非粘性的”。使用这个返回值时,如果在执行完onStartCommand后,服务被异常kill掉,系统不会自动重启该服务。
后面两个方法就没没必要解释了 这次源码分析就到此为止