android IntentService 简单介绍

来源:互联网 发布:淘宝店详情图片尺寸 编辑:程序博客网 时间:2024/06/06 14:12

IntentService 是Service类的子类,用来处理异步请求。客户端可以通过startService(Intent)方法传递请求给IntentService

下面分析下IntentService 执行过程:

IntentService的onCreate如下

  @Override
    public void onCreate() {
        super.onCreate();
        HandlerThread thread = new HandlerThread("IntentService[" + mName + "]");
        thread.start();
        mServiceLooper = thread.getLooper();
        mServiceHandler = new ServiceHandler(mServiceLooper);
    }

在onCreate过程中,创建了一个HandlerThread,也就是另外启动了一个独立线程,我们要处理的异步请求也会在这个线程中执行。

创建了一个ServiceHandler的实例mServiceHandler。serviceHandler源码如下:

 private final class ServiceHandler extends Handler {
        public ServiceHandler(Looper looper) {
            super(looper);
        }


        @Override
        public void handleMessage(Message msg) {
            onHandleIntent((Intent)msg.obj);
            stopSelf(msg.arg1);
        }
    }


我们在startService时会执行service的onStart();下面看IntentService的onStart:

 public void onStart(Intent intent, int startId) {
        Message msg = mServiceHandler.obtainMessage();
        msg.arg1 = startId;
        msg.obj = intent;
        mServiceHandler.sendMessage(msg);
    }

这里我们可以看到使用mServiceHandler发了一个消息,在ServiceHandler的handleMessage中执行 onHandleIntent((Intent)msg.obj);

这里的onHandlerIntent()需要我们自己实现,因为mServiceHandler的looper对象为thread的mServiceLooper,所以我们的handlerMessage

执行在thread中。为什么说intentservice是顺序执行我们的任务的,是因为每次执行onstart最后都要执行onHandlerIntent,他们在同一线程中,而同一线程中,方法执行是有序的,只有前一个方法执行完了,才会执行下一个。



0 0