IntentService源码分析

来源:互联网 发布:淘宝怎么刷流量安全 编辑:程序博客网 时间:2024/06/05 22:37

IntentService源码分析

public abstract class IntentService extends Service {    private volatile Looper mServiceLooper;    private volatile ServiceHandler mServiceHandler;    private String mName;    private boolean mRedelivery;    /*这个ServiceHandler是一个handler,在下面的oncreate方法中和一个异步thread关联*/    private final class ServiceHandler extends Handler {        public ServiceHandler(Looper looper) {            super(looper);        }        @Override        public void handleMessage(Message msg) {            /*onHandleIntent里面所有代码都在异步线程执行*/        onHandleIntent((Intent)msg.obj);        //处理完毕,stop自己            stopSelf(msg.arg1);        }    }    /*创建时候赋值HandlerThread的名字*/    public IntentService(String name) {        super();        mName = name;    }    @Override    /*在onCreate方法中,HandlerThread被创建并和mServiceHandler进行关联*/    public void onCreate() {        super.onCreate();        HandlerThread thread = new HandlerThread("IntentService[" + mName + "]");        thread.start();        mServiceLooper = thread.getLooper();        mServiceHandler = new ServiceHandler(mServiceLooper);    }    @Override    public void onStart(@Nullable Intent intent, int startId) {        Message msg = mServiceHandler.obtainMessage();        msg.arg1 = startId;        msg.obj = intent;        mServiceHandler.sendMessage(msg);    }    @Override    public int onStartCommand(@Nullable Intent intent, int flags, int startId) {        onStart(intent, startId);        return mRedelivery ? START_REDELIVER_INTENT : START_NOT_STICKY;    }    /*处理完毕,停止looper*/    @Override    public void onDestroy() {        mServiceLooper.quit();    }    @WorkerThread    /*这个方法代码区里面可以直接编写耗时代码,因为是在一个异步线程的handler的回调中*/    protected abstract void onHandleIntent(@Nullable Intent intent);}
0 0