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);
就这样
在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);
这不是注册吗?广播都可以发送成功,这代表肯定注册了啊
调用了 然后爆第二个错误
参考技术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中广播问题的主要内容,如果未能解决你的问题,请参考以下文章