Android4.4 framework分析——廣播的註冊(BroadcastReceiver)和發送(sendbroadcast)過程分析

來源:互聯網
上載者:User

Android4.4 framework分析——廣播的註冊(BroadcastReceiver)和發送(sendbroadcast)過程分析

在Android應用程式架構中,Activity和Service類都繼承了ContextWrapper類,因此,我們可以在Activity或者Service的子類中調用registerReceiver函數來註冊廣播接收器。

是在activity中註冊廣播的過程:

 

step1~step3,就是一般的調用過程。

step4,registerReceiverInternal()方法如下:

 

    private Intent registerReceiverInternal(BroadcastReceiver receiver, int userId,            IntentFilter filter, String broadcastPermission,            Handler scheduler, Context context) {        IIntentReceiver rd = null;        if (receiver != null) {            if (mPackageInfo != null && context != null) {                if (scheduler == null) {                    scheduler = mMainThread.getHandler();                }                rd = mPackageInfo.getReceiverDispatcher(                    receiver, context, scheduler,                    mMainThread.getInstrumentation(), true);            } else {                if (scheduler == null) {                    scheduler = mMainThread.getHandler();                }                rd = new LoadedApk.ReceiverDispatcher(                        receiver, context, scheduler, null, true).getIIntentReceiver();            }        }        try {            return ActivityManagerNative.getDefault().registerReceiver(                    mMainThread.getApplicationThread(), mBasePackageName,                    rd, filter, broadcastPermission, userId);        } catch (RemoteException e) {            return null;        }    }

scheduler傳下的是null,scheduler = mMainThread.getHandler();將獲得H的對象mH,用於後續broadcast的發送。

 

 

step6,先從已有的註冊列表mReceivers中尋找是否由相同的ReceiverDispatcher,若之前沒有註冊過,則new一個ReceiverDispatcher,並記錄在mReceivers中,ReceiverDispatcher建立過程中,同時產生一個InnerReceiver,InnerReceiver用於接收處理sendBroadcast發過來的廣播。

 

step9~step11,通過binder訪問ActivityManagerService的registerReceiver,將廣播接收器receiver儲存起來。

 

 

是廣播發送(sendBroadcast)的過程:

 

 

 

右鍵複製圖片地址,在瀏覽器中開啟即可查看大圖。

未完待續,有不對的地方,請指正。


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.