美文网首页
本地广播

本地广播

作者: 爱做梦的严重精神病患者 | 来源:发表于2018-08-28 17:13 被阅读0次

    1.发送广播

     广播是一种可以跨进程的通信方式。因此在这个应用程序内发出的广播其他的应用程序应该也是可以收到的。


    发送标准广播:使用sendBroadcast(intent),intent上附加注册广播接收器时所添加的内容。
    发送有序广播:使用sendOrderBroadcast(intent, string),同时在广播接收器注册中,用android:priority设置优先级,优先级大的先接收

    <receiver android:name=".MyBroadcastReceiver"
                android:enabled="true"
                android:exported="true">
                <intent-filter android:priority="100">
                    <action android:name="XXXXXXX"/>
                </intent-filter>      
            </receiver>
    

     若要在接收后截断广播的传播,则在先接收到广播的广播接收器的onReceiver()方法中调用abortBroadcast()


    2.本地广播

     前面发送和接收的广播都属于系统全局广播,即发出的广播可以被其他任何应用程序接收到,并且也可以接收来自其他任何应用程序的广播
    本地广播机制:使用LocalBroadcastManager发出的广播只能在应用程序的内部进行传递,并且使用广播接收器也只能接收来自这个应用程序发出的广播。用以解决安全性问题。
    本地广播无法用静态注册方式进行注册,只能使用动态注册
     详见下:

    @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");
            //发送本地广播
            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事件分发机制

    ViewGroup事件分发机制.png

    4.View事件分发机制

     对于dispatchTouchEvent()所返回的boolean变量的值:

     当值为true时,意味着,对于同一方法例如:onTouch或
    onTouchEvent中,当ACTION_DOWN执行后,会继续执行ACTION_MOVE和ACTION_UP等操作

     当值为false时,意味着,执行完ACTION_DOWN后便不再执行


     对于onTouch()和onTouchEvent()所返回的boolean变量的值:

    onTouch()优于onTouchEvent()先执行。如果在onTouch()方法中通过返回true将事件消费掉,onTouchEvent()将不会再执行。

     当值为true时,意味着,已经将此行为消耗掉,不会再继续传入下一个方法(例如onClick()中去再次执行)。

     当值为false时综合判断dispatchTouchEvent()所返回的boolean变量的值。

    相关文章

      网友评论

          本文标题:本地广播

          本文链接:https://www.haomeiwen.com/subject/nihqwftx.html