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事件分发机制.png4.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变量的值。
网友评论