Android 同一个BroadcastReceiver在两个程序里执行

在项目中,需要将同一段程序变为两个app,并且可以安装在同一个手机里,一般而言两个相同的程序安装在手机里,会被互相替代,但是我们改一下gradle文件中的applicationId(如图所示),使两个程序该值不同即可同时安装在手机里。

在程序中,有socket心跳连接服务,在心跳连接断开时会发送广播提醒,从而弹框提醒用户连接已断开。经改动Id后的两个app,在测试时发现,弹框总会弹出两次,这种情况只有在两个app同时在手机中运行时才会出现(一个在前台运行,一个在后台),在打出Log后发现,原因在于广播发送了两次,由于两个app是由同一代码执行生成的,因此广播的配置相同,如下段代码即为广播配置:

private void registerReceiver() {
        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction(BackService.HEART_BEAT_ACTION);
        intentFilter.addAction(BackService.MESSAGE_ACTION);
        getApplicationContext().registerReceiver(mReceiver, intentFilter);
    }
两个app同时在手机中运行时,执行一次发送广播的代码,就会同时触发两个程序的广播,由于一个在后台,程序的执行就会结果就会全部体现在前台的程序里面,导致弹框出现两次,解决方法为把其中一个广播的配置改动,使两个程序的广播配置不同即可,经测后发现该问题已经消失。

猜你喜欢

转载自blog.csdn.net/androidforwell/article/details/70355345