如何在应用程序后台运行时监听系统广播 一般情况下Broadcast Receiver都是在onResume的时候注册,在onPause的时候注销。如果想要在程序转到后台运行时(此时Activity已经onStop)监听系统广播,如网络连接状态,应该怎么办?现在遇到的问题是,只要在后台运行时遇到监听的广播,很容易出现ANR。大家知道该怎么办吗?还是不应该在这个时候进行监听?又或者应该换一种处理方法?请大家指导一下,谢谢Broadcast ReceiverANR 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 一般可以在onDestroy()里注销广播,或者使用service,ANR估计不是接收广播的事情 ,应该是接收到之后对UI线程的操作时间过长 你说的ANR 应该不是有注册或者注销 broadcast receiver 而是由于 坚挺后的动作吧 注册广播的方式有两种,你可以使用第二种,即在AndroidManifest.xml中注册<receiver android:name=".ServiceBroadcastReceiver" > <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED"/> </intent-filter> </receiver>然后实现ServiceBroadcastReceiver,收到该广播,做你想做的事情。这个是在整个程序的生命周期均存在,你程序退出了都可以继续接收的 谢谢你的答复。但是我发现我现在监听WifiManager.NETWORK_STATE_CHANGED_ACTION这个广播,在我的Activity每次onResume的时候都会收到一次,就算这个时候并没有发生网络状态改变的事情,这是怎么回事啊?而且我是希望在程序不同阶段对这个广播的处理是不一样的,因为有时候是我的程序会主动改变WIFI连接。 是的。收到那个广播后,就弹出个AlertDialog,由于这个时候在后台运行,所有就没有对AlertDialog做处理,就出现ANR了。 谢谢你的答复。但是我发现我现在监听WifiManager.NETWORK_STATE_CHANGED_ACTION这个广播,在我的Activity每次onResume的时候都会收到一次,就算这个时候并没有发生网络状态改变的事情,这是怎么回事啊?而且我是希望在程序不同阶段对这个广播的处理是不一样的,因为有时候是我的程序会主动改变WIFI连接。那你需要检查下你的onCreate onStart onResume中有没有对wifi进行操作 谢谢你的答复。但是我发现我现在监听WifiManager.NETWORK_STATE_CHANGED_ACTION这个广播,在我的Activity每次onResume的时候都会收到一次,就算这个时候并没有发生网络状态改变的事情,这是怎么回事啊?而且我是希望在程序不同阶段对这个广播的处理是不一样的,因为有时候是我的程序会主动改变WIFI连接。那你需要检查下你的onCreate onStart onResume中有没有对wifi进行操作WifiManager.getConnectionInfo()算不算?不然就没了 应用程序变量丢失,提示null,诡异 求解:设定默认闹钟铃声需要申明神马权限? android资源中hdpi mdpi ldpi存图片的问题 android怎么识别驱动模块 ? 这个Activity有什么错误呢???? android 视频播放问题 跪求Android怎样将res文件夹打包到jar 全局Application Android板块发帖须知及大牛推荐 bitmap转9patch图片出错 android是如何解析Manifest文件的 Canvas.drawText(text, x, y, paint)怎么设置要显示的文本“text"在x,y的左下角显示?
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>然后实现ServiceBroadcastReceiver,收到该广播,做你想做的事情。这个是在整个程序的生命周期均存在,你程序退出了都可以继续接收的
谢谢你的答复。但是我发现我现在监听WifiManager.NETWORK_STATE_CHANGED_ACTION这个广播,在我的Activity每次onResume的时候都会收到一次,就算这个时候并没有发生网络状态改变的事情,这是怎么回事啊?而且我是希望在程序不同阶段对这个广播的处理是不一样的,因为有时候是我的程序会主动改变WIFI连接。
是的。收到那个广播后,就弹出个AlertDialog,由于这个时候在后台运行,所有就没有对AlertDialog做处理,就出现ANR了。
谢谢你的答复。但是我发现我现在监听WifiManager.NETWORK_STATE_CHANGED_ACTION这个广播,在我的Activity每次onResume的时候都会收到一次,就算这个时候并没有发生网络状态改变的事情,这是怎么回事啊?而且我是希望在程序不同阶段对这个广播的处理是不一样的,因为有时候是我的程序会主动改变WIFI连接。
那你需要检查下你的onCreate onStart onResume中有没有对wifi进行操作
谢谢你的答复。但是我发现我现在监听WifiManager.NETWORK_STATE_CHANGED_ACTION这个广播,在我的Activity每次onResume的时候都会收到一次,就算这个时候并没有发生网络状态改变的事情,这是怎么回事啊?而且我是希望在程序不同阶段对这个广播的处理是不一样的,因为有时候是我的程序会主动改变WIFI连接。
那你需要检查下你的onCreate onStart onResume中有没有对wifi进行操作
WifiManager.getConnectionInfo()算不算?不然就没了