android phone学习

大学的贪玩要不时间补回来,这要付出巨大的努力。可以说,毕业四年,我每天都过的很充实,从工作那天开始,2008.5.12大地震那天我入职了,从那天开始,我没虚度一天,每天都很努力,四年了,机会没有那天在12点前睡国校,我深知,自己很笨,自己学东西慢,那就只能笨鸟先飞。

此时,有多少程序员在苦苦的思索,张毫在干什么呢?我已经不在年轻,我需要吧launcher, setting ,phone, contact四个应用程序搞透彻了。

把linux的服务配置,日常应用搞透彻了。

把shell, python脚本搞透彻了。  对C ,C++, JAVA 有较好的理解。 这都需要学习,思考,理解,消化。

我是山沟的孩子,没有关系,没有经验,只能吃苦,对自己严格要求。

我不怕苦,不怕输。 一直努力,就不信不行。 必须深度探索。 没有坚强的意志什么都干不了。

phone有通知机制,把底层状态的变化上报通知给应用程序,应用程序需要TelephonyManger.listen

 public void listen(PhoneStateListener listener, int events) {
        String pkgForDebug = sContext != null ? sContext.getPackageName() : "<unknown>";
        try {
            Boolean notifyNow = (getITelephony() != null);
            sRegistry.listen(pkgForDebug, listener.callback, events, notifyNow);
        } catch (RemoteException ex) {
            // system process dead
        } catch (NullPointerException ex) {
            // system process dead
        }
    }

 

我们一看就知道,sRegistry.listen(pkgForDebug, listener.callback, events, notifyNow); 这个东西其实是吧phonestatelistener 的callback保存起来,保存在哪了嗯?

保存到了telephonyregistry的listenerj函数里。

 final int N = mRecords.size();
                    for (int i = 0; i < N; i++) {
                        r = mRecords.get(i);
                        if (b == r.binder) {
                            break find_and_add;
                        }
                    }
                    r = new Record();
                    r.binder = b;
                    r.callback = callback;
                    r.pkgForDebug = pkgForDebug;
                    mRecords.add(r);
                }

这里一看就是保存起来了。保存起来如何通知呢,需要应用程序发指令通知,

可以看看gsmphone的 notifySignalStrength() {
        mNotifier.notifySignalStrength(this);
    }

一看就是通知了, for (Record r : mRecords) {
                if ((r.events & PhoneStateListener.LISTEN_SIGNAL_STRENGTHS) != 0) {
                    try {
                        r.callback.onSignalStrengthsChanged(new SignalStrength(signalStrength));
                    } catch (RemoteException ex) {

这就是进程间通信了,那应用程序如何知道呢》? IPhoneStateListener callback = new IPhoneStateListener.Stub() {
        public void onServiceStateChanged(ServiceState serviceState) {
            Message.obtain(mHandler, LISTEN_SERVICE_STATE, 0, 0, serviceState).sendToTarget();
        }

这个callback其实是个phonestatelisnter 的内部类,它会在发个message通知外部类, 这就是为什么要交listen的时候要继承phonestatelistener来获取通知了

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

导航