美文网首页
IntentService原理和使用

IntentService原理和使用

作者: 杨殿生 | 来源:发表于2018-08-20 17:13 被阅读0次

IntentService作用

在一个服务中开启一个子线程,处理异步事件,处理完只有关闭自己

IntentService原理

IntentService是抽象类继承自Service,首先我们要继承IntentService,并且复写onHandleIntent()方法,Service会在处理完这个这个复写的方法后关闭自己
首先看在创建时的onCreate方法

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

这里会创建一个HandlerThread用于处理异步事件,onCreate中主要就是准备HandlerThread和用于处理异步的Handler

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

onStart方法会创建Message然后通过子线程创建的Handler去发送消息,我们在来看消息处理做了什么

  private final class ServiceHandler extends Handler {
        ...
        @Override
        public void handleMessage(Message msg) {
            onHandleIntent((Intent)msg.obj);
            stopSelf(msg.arg1);
        }
    }

handleMassage处理子线程消息,调用抽象方法,也就是子类复写的方法,然后关闭自己

 @Override
    public void onDestroy() {
        mServiceLooper.quit();
    }

关闭自己的时候会调用Looper的quit()方法

IntentService使用

public class MyIntentService extends IntentService{

    public MyIntentService(String name) {
        super(name);
    }

    public MyIntentService() {
        this("MyIntentService");
    }

    @Override
    public int onStartCommand(@Nullable Intent intent, int flags, int startId) {
        LogUtils.log("服务开始了");
        return super.onStartCommand(intent, flags, startId);
    }

    @Override
    protected void onHandleIntent(@Nullable Intent intent) {
        LogUtils.log("处理我自己的事");
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        LogUtils.log("服务结束了");
    }
}

1,继承IntentService,复写onHandleIntent方法,
2,然后在清单文件中注册服务

<service android:name=".handle_thread.MyIntentService"/>

3,启动服务

 Intent intent = new Intent(this,MyIntentService.class);
 startService(intent);

相关文章

网友评论

      本文标题:IntentService原理和使用

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