onCreate 中使用广播接收器时,onReceive 会多次执行

根本原因:new 了多个 BroadcastReceiver。

1,原因一:没有在onDestory中调用解注册。

unregisterReceiver()

2,原因二:onReceive 写在了 baseActivity 的 onCreate 中,每个继承的子activity 都调用一次,重复new了N次。 

onCreate()

3,onReceive 写在了子activity2 中,但是跳转activity过程中没有解注册,然后又跳转回 子activity2,导致重复new了多次。

  intent = new Intent(Activity1.this, Activity2.class);
  startActivity(intent);

找到了原因就好办了,该解注册就解注册释放,不解注册的就要保持其唯一性。

具体怎么弄,代码下次再整理

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
静态广播接收器也可以在Service处理广播的监听,具体实现方法如下: 1. 在AndroidManifest.xml文件声明广播接收器,并设置android:enabled和android:exported属性为false,禁止其他应用程序调用该广播接收器。 ``` <receiver android:name=".MyBroadcastReceiver" android:enabled="false" android:exported="false"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED"/> </intent-filter> </receiver> ``` 2. 在Service的onCreate()方法创建Intent对象,并设置Action为要监听的广播事件,然后调用sendBroadcast()方法发送广播。 ``` public class MyService extends Service { @Override public void onCreate() { super.onCreate(); Intent intent = new Intent(); intent.setAction("android.intent.action.BOOT_COMPLETED"); sendBroadcast(intent); } @Override public int onStartCommand(Intent intent, int flags, int startId) { // 处理业务逻辑 return super.onStartCommand(intent, flags, startId); } } ``` 3. 在Service创建广播接收器实例,并在onCreate()方法注册该广播接收器,同在onDestroy()方法取消注册。 ``` public class MyService extends Service { private MyBroadcastReceiver myBroadcastReceiver; @Override public void onCreate() { super.onCreate(); myBroadcastReceiver = new MyBroadcastReceiver(); IntentFilter filter = new IntentFilter(); filter.addAction("android.intent.action.BOOT_COMPLETED"); registerReceiver(myBroadcastReceiver, filter); } @Override public void onDestroy() { super.onDestroy(); unregisterReceiver(myBroadcastReceiver); } private class MyBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // 处理接收到的广播 if (intent.getAction().equals("android.intent.action.BOOT_COMPLETED")) { Log.i("MyService", "Boot completed"); } } } } ``` 这样,Service就能够在后台监听并处理指定的广播事件了。需要注意的是,静态注册的广播接收器不能在Service外部直接调用,否则抛出SecurityException异常。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值