美文网首页
Android:IntentService

Android:IntentService

作者: SupKing_a520 | 来源:发表于2020-05-07 18:46 被阅读0次

    Android中的IntentService是继承自Service类的。

    Service的特点:

    1. Service的回调方法(onCreate、onStartCommand、onBind、onDestroy)都是运行在主线程中的。
    2. 当我们需要在Service的onStartCommand方法中写代码完成工作,但是onStartCommand是运行在主线程中的,如果我们需要在此处完成一些网络请求或IO等耗时操作,这样就会阻塞主线程UI无响应,从而出现ANR现象。
    3. 为了解决这种问题,最好的办法就是在onStartCommand中创建一个新的线程,并把耗时代码放到这个新线程中执行。

    由此看来,创建一个带有工作线程的Service是一种很常见的需求(因为工作线程不会阻塞主线程),所以Android为了简化开发带有工作线程的Service,Android额外开发了一个类——–IntentService。

    IntentService具有以下特点:

    1. IntentService自带一个工作线程,当我们的Service需要做一些可能会阻塞主线程的工作的时候可以考虑使用IntentService。
    2. 我们需要将要做的实际工作放入到IntentService的onHandleIntent回到方法中,当我们通过startService(intent)启动了IntentService之后,最终Android Framework会回调其onHandleIntent方法,并将intent传入该方法,这样我们就可以根据intent去做实际工作,并且onHandleIntent运行在IntentService所持有的工作线程中,而非主线程。
    3. 当我们通过startService多次启动了IntentService,这会产生多个job,由于IntentService只持有一个工作线程,所以每次onHandleIntent只能处理一个job。而多多个job,IntentService会如何处理?处理方式是one-by-one,也就是一个一个按照先后顺序处理,先将intent1传入onHandleIntent,让其完成job1,然后将intent2传入onHandleIntent,让其完成job2…这样直至所有job完成,所以我们IntentService不能并行的执行多个job,只能一个一个的按照先后顺序完成,当所有job完成的时候IntentService就销毁了,会执行onDestroy回调方法。
    public class DownloadIntentService extends IntentService {
    
        public DownloadIntentService(){
            super("Download");
            Log.i("DemoLog", "DownloadIntentService构造函数, Thread: " + Thread.currentThread().getName());
        }
        
        @Override
        public void onCreate() { 
            super.onCreate();
        }
        
        @Override
        public int onStartCommand(Intent intent, int flags, int startId) {
            return super.onStartCommand(intent, flags, startId);
        }
        
        @Override
        protected void onHandleIntent(Intent intent) {
            //处理耗时操作 
        }
        
        @Override
        public void onDestroy() {
            super.onDestroy();
        }
    }
    

    相关文章

      网友评论

          本文标题:Android:IntentService

          本文链接:https://www.haomeiwen.com/subject/zlhzghtx.html