本地廣播

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ā)機制

ViewGroup事件分發(fā)機制.png

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變量的值。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,614評論 19 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,147評論 25 708
  • 【Android 廣播】 BroadcastReceiver簡介 BroadcastReceiver(廣播接收器)...
    Rtia閱讀 3,551評論 1 17
  • 像登山一樣,工作也需要一步一個腳印地積累實力和經(jīng)驗。所以不管是對于剛?cè)肷鐣男氯?,還是久經(jīng)沙場的老將來說,踏踏實實...
    6冬6閱讀 3,447評論 0 0
  • 隨著《北京遇上西雅圖不二情書2》的上映,房產(chǎn)中介吳秀波演的角色大牛(Daniel)的口號“買斷美國”,高中生浩浩的...
    留學咖啡館閱讀 938評論 0 1

友情鏈接更多精彩內(nèi)容