android中广播问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android中广播问题相关的知识,希望对你有一定的参考价值。

我弄了一个广播 没发送的时候退出那个页面为毛老报错

android.app.IntentReceiverLeaked: Activity com.slife.cwsoa.InspectInfoActivity has leaked IntentReceiver com.slife.cwsoa.InspectInfoActivity$MyReceiver@43785e20 that was originally registered here. Are you missing a call to unregisterReceiver()?(页面正常logcat输出报错)

在销毁Activity时 unregisterReceiver()也报错(页面崩掉)
java.lang.RuntimeException: Unable to destroy activity com.example.slife.cwsoa/com.slife.cwsoa.InspectInfoActivity: java.lang.IllegalArgumentException: Receiver not registered: com.slife.cwsoa.InspectInfoActivity$MyReceiver@42b3a460
ACtivity A:
mr=new MyReceiver();
IntentFilter filter=new IntentFilter();
filter.addAction("com.test.InspectInfoActivity");
registerReceiver(mr,filter);

class MyReceiver extends BroadcastReceiver
@Override
public void onReceive(Context context, Intent intent)
String value=intent.getStringExtra("isClose");
if ("true".equals(value))
finish();




Activity B:
Intent in=new Intent();
in.putExtra("isClose","true");
in.setAction("com.test.InspectInfoActivity");
context.sendBroadcast(in);

就这样

参考技术A 如果你是Oncreat注册,你就在destroy里反注册。追问

在ondestory里调用了 第二种错误

追答

我意思你第二种错误上写的Receiver not registered, 你确认一下注册了没有。

追问

mr=new MyReceiver();
IntentFilter filter=new IntentFilter();
filter.addAction("com.test.InspectInfoActivity");
registerReceiver(mr,filter);

这不是注册吗?广播都可以发送成功,这代表肯定注册了啊

mr=new MyReceiver();
IntentFilter filter=new IntentFilter();
filter.addAction("com.test.InspectInfoActivity");
registerReceiver(mr,filter);

这不是注册吗?广播都可以发送成功,这代表肯定注册了啊

参考技术B super.onDestory()之前调用unregisterReceiver(mr);追问

调用了 然后爆第二个错误

参考技术C 你不给源码,谁能猜出来你哪里错了呢、追问

问题已补充

追答

虽然不清楚你的具体代码,你只给了这么几句,我只能说下我能看到的和想到的了。
class MyReceiver extends BroadcastReceiver
@Override
public void onReceive(Context context, Intent intent)
String value=intent.getStringExtra("isClose");
if ("true".equals(value))
finish();



你在Activity A里边的广播触发直接就finish(),这个原因我不清楚,总之感觉很怪,finish之前并没有销毁mr,这个广播没有销毁activity就finish()强行销毁了,这个应该是你之前的警告的原因。
至于第二个是错误,我想可能是这样的:你是在A中注册的广播,然后用A去启动B,之后你想在B中销毁A的广播,但是A在调用B时候已经finish()了,B无法回调A的广播销毁。
代码太少,我只是猜测。希望你现在自己已经解决的问题。
另外非常不建议这样突然的finish()。

追问

在Activity A里边的广播触发直接就finish(),这广播就是为了finish页面啊,难道finish是直接销毁了广播而不是页面?那也不对啊 我页面确实关掉了啊,而且我退出有页面根本没有触发广播啊 他怎么会进那块代码啊

追答

一共几行代码,就不能全发出来,你这乱七八糟的问题没有源码跑一下谁能猜出来,又不是什么好代码怕我偷学一样。

追问

关键是就是那几行啊 多的没了啊

追答

AndroidManifest配置呢?你这个apk到底是A是main action还是B呢?如果就这么几行,onCreate,onStop方法呢?早点吧全部代码发出来跑一次,什么问题都知道了,就在这里左一句有一句的。

本回答被提问者采纳

以上是关于android中广播问题的主要内容,如果未能解决你的问题,请参考以下文章

Android中广播的简单使用

Android中广播接收者BroadcastReceiver详解

在android中广告轮播是怎么做的

Android广播接收器与服务[重复]

android 类中的 广播怎么使用

如何在 PySpark 中广播 RDD?