Android 看IntentService源码延伸

来源:互联网 发布:守望先锋数据app 编辑:程序博客网 时间:2024/05/01 10:57

无意间瞄到IntentService,就看了看,然后发现按耐不住洪荒之力想要一探究竟。再加上它里面设计了IBinder,所以我想看看它的真面目,就有了下面这篇杂记

1.volatile
IntentService底层用到了这个类型修饰符

2.HandleThread
说到HandlerThread,先说Handler,Handle默认在mainTread里运行,handler.post(runable)是没有调用runable的Start方法,直接运行了runable的run(),这样就导致了这个runable仍是运行在主线程里面的。

然而竟然在Handler.java中发现了这段代码:

private final class MessengerImpl extends IMessenger.Stub {
public void send(Message msg) {
Handler.this.sendMessage(msg);
}
}
这说明handler.sendMessage与handlerMessage之间使用了aidl,这让我想到activity之间使用Intent启动的时候,底层用了IBinder模拟C/S模式通信最终创建目的activity(以后在说)。

接着回到Handle与HandlerThread。
Handler 无父类无实现,自成一类
HandlerThread 继承Thread
所以可以看出他们名字虽然相似,但是并没有联系(两个类里面都有Looper属性这是真的,Looper可用于获取消息队列)
转4接着继续
Handler 就是主要就是Looper,MessageQueue,Callback在兜兜转转,很经典(略过),另外还有一个

class MessengerImpl extends IMessenger.Stub (aidl)

这个我觉得就有点意思了…







3.查到这里的时候,突然看到了UIHandler类,在MobTool.jar包里面,这个包是用来一键分享功能开发的。(待续)

4.java回调机制在android中的应用
鄙人学识尚浅,通俗的讲,就是在副类中定义一个接口,并且在这个副类中会处处使用它做一些处理(我看到的都是响应式处理),这时候它是空的,不打紧。下面这个副类一定会有一个函数是以该接口类为参数,并且这个函数会被主类里面调用(有时候会是副类构造函数),并将主类里面创建的该接口实现类通过这个函数装入其中,这就是简单的回调机制。

5.IntentService和Service
IntentService继承service,里面有线程子类调用外部类接口,其实看一些源码,发现IntentService的框架模式跟平时写的activity好相似。
都有自己的onCreate(),onStart()方法等类似性质的周期函数,然后也都都一个handler实现类。不同的是IntentService里面有一个onbind()函数,这函数后面再说。
而Service

public abstract class Service extends ContextWrapper implements ComponentCallbacks2 {

(是不是觉得这两个的类很陌生,莫急)
那么可以得出结论,IntentService继承service,并用多线程包装了Service,如果Service不清楚的话,可以理解成一个组件而已,和view差不多,IntentService相当于自定义view,不同的是加了多线程。

然而我看Service源码,竟然发现了这个函数onConfigurationChanged
虽然没有实现体,但是这个函数也是很有学问的。比如手机横竖屏切换,会触发这个函数。Service中也有这个函数,这样我就想到了之前看的关于Context的一些东西。Service,Activity等都是集成Context的,这个Context可是大学问







0 0
原创粉丝点击