Android coder进阶Android开发Android知识

IntentService源码

2017-12-10  本文已影响15人  721d739b6619

分析的IntentService源码为API-25版本

IntentService属于Service

IntentService继承自Service,那么它的结构就和Service一样。


image.png

这个不需多讲。但在使用上与Service有点不同,可以说简化版的Service。有点类似Handler与AsyTask的关系。

IntentService的使用

Intent serviceIntent = new Intent(this, ParseIntentService.class);
        startService(serviceIntent);

上面代码就是开启一个IntentService服务。开启之后就不用管理它了。这就是刚才说的简化版的Service。这篇文章的重点其实就是这里:IntentService为什么是简化的Service
上面的ParseIntentService继承IntentService,重写了onHandleIntent()方法。

IntentService源码

IntentService的源码不多就只有百来行


image.png

解析下这里的代码:
出现Looper和Handler。

IntentService的onCreate()方法

都知道Service和Activity类似都会有相关生命周期的方法。当上门的代码开启服务,系统就会调用Service的onCreate()


image.png

通过onCreat()方法可以得出下边的结论:

HandlerThread

该类其实是干嘛的呢?简单来说,它就是帮我们创建一个工作线程的Looper,Looper的作用就是轮询我们的消息分发机制(这里不细说,细说又是一篇了。。。)。详细了解HandlerThread 可以看下面这篇文章
为什么要用HandlerThread,怎么用?

为什么出现Handler,Looper这些消息分发类别的类?

image.png

主要因为IntentService的onStart()方法中发送了消息,上面创建onCreat()时,构建了ServiceHandler对象。通过Handler消息分发机制,处理抽象方法onHandleIntent();

使用IntentService,重写onHandleIntent()方法

public class ParseIntentService extends IntentService {
 
    public ParseIntentService() {
        super("ParseIntentService");
    }

    /**
     * 该方法在工作线程上调用
     * */
    @Override
    protected void onHandleIntent(@Nullable Intent intent) {
        //TODO 需要在服务做的事情
                    }
                });
    }
}
Intent serviceIntent = new Intent(this, ParseIntentService.class);
        startService(serviceIntent);

总结

上一篇 下一篇

猜你喜欢

热点阅读