1.發(fā)送廣播
?廣播是一種可以跨進程的通信方式。因此在這個應用程序內(nèi)發(fā)出的廣播,其他的應用程序應該也是可以收到的。
?發(fā)送標準廣播:使用sendBroadcast(intent),intent上附加注冊廣播接收器時所添加的內(nèi)容。
?發(fā)送有序廣播:使用sendOrderBroadcast(intent, string),同時在廣播接收器注冊中,用android:priority設置優(yōu)先級,優(yōu)先級大的先接收。
<receiver android:name=".MyBroadcastReceiver"
android:enabled="true"
android:exported="true">
<intent-filter android:priority="100">
<action android:name="XXXXXXX"/>
</intent-filter>
</receiver>
?若要在接收后截斷廣播的傳播,則在先接收到廣播的廣播接收器的onReceiver()方法中調(diào)用abortBroadcast()。
2.本地廣播
?前面發(fā)送和接收的廣播都屬于系統(tǒng)全局廣播,即發(fā)出的廣播可以被其他任何應用程序接收到,并且也可以接收來自其他任何應用程序的廣播。
?本地廣播機制:使用LocalBroadcastManager發(fā)出的廣播只能在應用程序的內(nèi)部進行傳遞,并且使用廣播接收器也只能接收來自這個應用程序發(fā)出的廣播。用以解決安全性問題。
?本地廣播無法用靜態(tài)注冊方式進行注冊,只能使用動態(tài)注冊。
?詳見下:
@Override
protected void onCreate(Bundle savedInstanceState) {
//獲得實例
mLocalBroadcastManager = LocalBroadcastManager.getInstance(this);
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("XXXXXXXX");
//注冊本地廣播接收器
mLocalBroadcastManager.registerReceiver(mLocalReceiver, intentFilter);
Intent intent = new Intent("XXXXXXXX");
//發(fā)送本地廣播
mLocalBroadcastManager.sendBroadcast(intent);
}
@Override
protected void onDestroy() {
super.onDestroy();
mLocalBroadcastManager.unregisterReceiver(mLocalReceiver);
}
class LocalReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "receive", Toast.LENGTH_SHORT).show();
}
}
3.ViewGroup事件分發(fā)機制

4.View事件分發(fā)機制
?對于dispatchTouchEvent()所返回的boolean變量的值:
?當值為true時,意味著,對于同一方法例如:onTouch或
onTouchEvent中,當ACTION_DOWN執(zhí)行后,會繼續(xù)執(zhí)行ACTION_MOVE和ACTION_UP等操作。
?當值為false時,意味著,執(zhí)行完ACTION_DOWN后便不再執(zhí)行。
?對于onTouch()和onTouchEvent()所返回的boolean變量的值:
?onTouch()優(yōu)于onTouchEvent()先執(zhí)行。如果在onTouch()方法中通過返回true將事件消費掉,onTouchEvent()將不會再執(zhí)行。
?當值為true時,意味著,已經(jīng)將此行為消耗掉,不會再繼續(xù)傳入下一個方法(例如onClick()中去再次執(zhí)行)。
?當值為false時,綜合判斷dispatchTouchEvent()所返回的boolean變量的值。