![](https://csdnimg.cn/release/download_crawler_static/86381477/bg4.jpg)
这个就是消息的产生由来,然后利用 mServiceHandler 将消息发送到消息队列等待处理.当消
息被处理回调时:
@Override
public void handleMessage(Message msg) {
onHandleIntent((Intent)msg.obj);
stopSelf(msg.arg1);
}
首先调用 onHandleIntent 这个将会执行继承 IntentService 子类中的方法(父
类调用子类的具体实现) 也就是 UsingIntentService.java 类中的
onHandleIntent(Intent)方法.
<a> : 这样就实现了一个什么过程呢?
Service 为了发过来的事务不阻塞,就在自己内部新建了一个 Thread 来处理事务,为了保证事
务是串行一个一个的处理的,又引入 Looper,进行消息队列管理,将事务包装成消息 push 到消
息队列,然后”慢慢”来处理.
<b> : 那么事务处理的生命周期是如何?
@Override
protected void onHandleIntent(@Nullable Intent intent) {
// 这里面已经是从消息队列中一个一个被拿出来处理的,
// 即使按键再快,也是间隔 3s,一个一个执行
Bundle bundle=intent.getBundleExtra("bundle");
String key=bundle.getString("key");
Log.
e
(
TAG
,"key : "+key);
try {
Thread.
sleep
(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
生命周期为大概 3s(我是说这段代码会让 IntentService 活过 3s),因为在这里每次处理的
onHandleIntent 执行一次大概就 3s.
然后实现:
@Override
public void onDestroy() {
super.onDestroy();
Log.
e
(
TAG
,"onDestroy");
}
这里直接给个结果吧! 只要每次发给服务处理的事务间隔不超过 3s 钟,都是使用同一个
IntentService 对象,如果超过 3s(即 onHandleIntent 执行完成),就会立即调用 onDestroy 将
IntentService 销毁.如果是在 3s 钟内调用,事务就会入消息队列,这个时候只要消息队列还有事