文章目录

由于Service和Broadcast都是运行在主线程中,所以在这两个里面我们无法做一些长时间的耗时操作,要执行耗时操作可以用异步线程AsyncTask或者IntentServie。IntentServie的好处是调用玩后会自己关闭service。

用法

调用基本是重写IntentService,然后生成intent,startService。

原理

IntentService里面可以执行耗时操作,下面看下它是怎么实现的。

IntentService 继承Service 。它里面主要是开了一个HandlerThread,执行耗时的操作的内容就在工作线程里面操作。

在onCreate的时候执时候,新建了一个HandlerThread

HandlerThread继承了Thread,实现的run方法是建立一套安卓的异步消息队列的。

在工作的时候,HandlerThread的onStart放就新建一个message放到handler里面。

Handler是另外定义的,对应到内部类是ServiceHandler 。

这里可以看出,执行handleMessage时候先执行onHandleIntent((Intent)msg.obj);,然后在执行stopSelf(msg.arg1);onHandleIntent是你自己定义的要执行的内容,stopSelf是结束service。也是就是说,执行完耗时操作后,会关掉service。


发表评论

电子邮件地址不会被公开。