如果一个Servce同时被StartServce还被BindServce的情况下,只调用stopServce没调用unBindServce是无法停止服务的(就算走了onDestory也无法停止)
#Servce和IntentServce的区别
- Servce是运行在程序后台的,为了保证应用某些组件仍然可以工作,这时就会引用Servce组件的概念(Servce绝对不是一个独立的进程他也更不是一个独立的线程他是依赖于应用程序的主线程的)
IntentServce
intentServce是继承Servce去处理异步请求的一个类
内部有一个工作线程HandlerThread来处理耗时操作任务
可以启动多次,每一次耗时操作都会以队列形式等候执行,不需要Stop,他执行完就会关闭
{ 与Servce不同的是IntentServce在onCreate生命周期时开了一个线程进行耗时操作,并创建了Looper绑定到HandlerThread,并将looper传给ServceHandler,这时ServceHandler就具有了异步执行任务的功能
在onStart生命周期通过handler.sendMessage发送了一个消息,Looper在消息队列中获取消息,再转给Handler处理
Handler处理中调用了onHandleIntent方法(抽象方法,处理异步操作),在onHandleIntent执行完毕之后,会调用stopSelf方法来结束服务
}
IntentServce总结
- IntentServce是继承并处理异步请求的一个类
- 内有工作线程来处理耗时操作,每次执行一个耗时任务就必须启动一个IntentServce
- IntentServce内部则是通过消息的方式发送给HandlerThread的,然后由Handler来处理Looper中的消息(多个任务会以插入MessageQueue的顺序也就是调用顺序来执行)