1.Service 与 IntentService区别:
-
Service不是运行在独立的线程,所以不建议在Service中编写耗时的逻辑和操作,否则会引起ANR。
-
IntentService
1.可用于执行后台耗时的任务,任务执行后会自动停止。
2.具有高优先级,适合高优先级的后台任务,且不容易被系统杀死。
3.可以多次启动,每个耗时操作都会以工作队列的方式在IntentService的onHandleIntent回调方法中执行。
2.IntentService的使用:
3.源码角度看一看
然后我们再来看看源码是怎么实现的:
-
第一:
在IntentService的onCreate()中我们可以看到:
首先是创建了一个HandlerThread线程,然后启动线程。
然后再通过这个线程里的Looper创建了一个Handler。
所以这个ServiceHandler是在子线程中执行的。【所以IntentService可用于执行后台耗时的任务】
-
第二:
在onStart()的时候会通过这个Handler去发送消息;
紧接着就会进入Handler的handleMessage()方法,
而这里面就有我们重写的onHandleIntent()方法。
并且在onHandleIntent()执行完以后会执行stopSelf().【所以任务执行后IntentService可以自动停止】
-
第三:
IntentService是具有高优先级的,不容易被系统杀死,那这个高优先级肯定是由线程决定的,
我们可以看到Thread在创建的时候设置的优先级为0,非常的高。
-
第四:
为什么每个耗时操作都会以工作队列的方式在回调方法中执行?
因为onHandleIntent()实际上就是在Handler中执行的,而我们的Handler就是一个消息队列(底层是单链表)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)