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。真不容易啊。挺努力,还没挣到钱。唉。

posted on 2012-10-12 17:41  nanjing  阅读(310)  评论(0编辑  收藏  举报

导航