开始
首先最开始的写法,在 onCreate 方法中创建了一个广播并注册。但是每次activity创建的时候都会注册一个新的广播?
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//创建广播实例
BroadcastReceiver payBroadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
//广播执行回调,自定义
Bundle payParams = intent.getExtras().getBundle("DATA");
UnifyPay.getUnifyPay(MyCordovaActivity.this).pay(payParams);
}
};
//注册广播
LocalBroadcastManager.getInstance(this).registerReceiver(payBroadcastReceiver,new IntentFilter("broadcastName"));
}
解决
上面情况就出现了每次send广播时回调方法会触发两次,比如这里使用的是付款的接口,会执行两次付款这指定是不行的。
最后将广播实例生命成一个静态变量,每次注册广播前判断是否为null,以此避免重复监听的问题。
static BroadcastReceiver payBroadcastReceiver;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//判断广播实例是否为空
if(payBroadcastReceiver !=null){
//创建广播实例
payBroadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
//广播执行回调,自定义
Bundle payParams = intent.getExtras().getBundle("DATA");
UnifyPay.getUnifyPay(MyCordovaActivity.this).pay(payParams);
}
};
//注册广播
LocalBroadcastManager.getInstance(this).registerReceiver(payBroadcastReceiver,new IntentFilter("broadcastName"));
}
}