編輯:關於Android編程
在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;
}
}
step6,先從已有的注冊列表mReceivers中查找是否由相同的ReceiverDispatcher,若之前沒有注冊過,則new一個ReceiverDispatcher,並記錄在mReceivers中,ReceiverDispatcher創建過程中,同時生成一個InnerReceiver,InnerReceiver用於接收處理sendBroadcast發過來的廣播。
step9~step11,通過binder訪問ActivityManagerService的registerReceiver,將廣播接收器receiver保存起來。
下圖是廣播發送(sendBroadcast)的過程:

右鍵復制圖片地址,在浏覽器中打開即可查看大圖。
未完待續,有不對的地方,請指正。
Android 動態添加Fragment的實例代碼
1.fragment1布局及代碼布局<?xml version=1.0 encoding=utf-8?><RelativeLayout
eclipse上傳代碼到gitbub
作為一名程序員,自己在學習時經常需要寫代碼,但是由於換電腦或其他原因這些代碼可能丟失,不方便以後的查看和復習。如果有一個版本服務器,不僅能把上傳代碼,在需要是可以隨時下載
Android 中AIDL的使用與理解
AIDL的使用:最常見的aidl的使用就是Service的跨進程通信了,那麼我們就寫一個Activity和Service的跨進程通信吧。首先,我們就在AS裡面新建一個ai
Android進程通信之Messenger和AIDL使用詳解
1. 前言提到的進程間通信(IPC:Inter-Process Communication),在Android系統中,一個進程是不能直接訪問另一個進程的內存的,需要提供一