android phone入门
这个phone真是不好整。得努力啊,不会没关系,有代码,慢慢琢磨,关键得有毅力。有兴趣。唉,张毫太厉害了。考虑相当周到。怎么才能比他强呢?是不是该换个工作了。
先一点一点的来吧,GSMphone继承了Phonebase,这个类有继承了handler,在PhoneBase里有很多的RegistrantList这中结构。在我看来,这些对象就是用来上报结果的。我当然phone还在摸索阶段。这里说是我自己的理解。
这些结构就是来管理Registrant这个结构的,这个结构是干什么的?它里面有Hander what 来通知上层的。那如何通知呢?
上层关心什么事件,就需要进行注册 比如public void registerForIncomingRing(
Handler h, int what, Object obj)
H就是以后给哪个Handler 丢消息,WHAT是消息值。这些参数会组合成Registrant然后放到相应的RegistrantList里。为什么那么多RegistrantList呢,因为很多的消息类型。同一个消息类型又有多人在关心。
唉,这个结构设计的非常好。诡异啊。这时注册标明我关心这些事件,底层通过
protected void notifyNewRingingConnectionP(Connection cn) {
if (!mIsVoiceCapable)
return;
AsyncResult ar = new AsyncResult(null, cn, null);
mNewRingingConnectionRegistrants.notifyRegistrants(ar);
}
notify这些东西来通知上层。
反正Phonebase Ril这两个类,在我看来,就主要做两件事情,
1 下达命令,下达命令,需要实现几个因素,谁下达,通过什么下达,下达什么东西,谁接受命令。
谁下达应是上层了,上层类多了区了,还没研究完,如何下达,通过RIL里的方法下达,
RIL初始化时候又创建了两个线程sender receiver,UI线程下达命令给发的线程,发的线程通过socket和RILD通信。
下达了什么命令呢?这个是关键,我也不清楚,不过结构就是RILRequest。
所有下达的命令都是通过
private void
send(RILRequest rr) {
Message msg;
if (mSocket == null) {
rr.onError(RADIO_NOT_AVAILABLE, null);
rr.release();
return;
}
msg = mSender.obtainMessage(EVENT_SEND, rr);
acquireWakeLock();
msg.sendToTarget();
}
这个东西出去了,msender是发线程的Handler。真不容易啊。挺努力,还没挣到钱。唉。