我在我的活动中注册了一个BroadcastReceiver,用于处理当消息到达时由GCMBaseIntentService发送的广播。当我的应用程序在foregound中运行时,一切正常,但是在很长一段时间后,即使我不注销接收器我的活动也没有工作正常(不接收广播)。我该如何解决?
首先,这是我第一次使用BroadcastReceiver这是我的代码:
<receiver
android:name="com.google.android.gcm.GCMBroadcastReceiver"
android:permission="com.google.android.c2dm.permission.SEND" >
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<category android:name="dim.taxigen.taxigen_driver"/>
</intent-filter>
</receiver>
在清单中。
registerReceiver(mreceiver, new IntentFilter(
"dim.taxigen.taxigen_driver.DISPLAY_MESSAGE"));
以及我如何在我的活动中注册。
答案 0 :(得分:1)
我认为您不会以编程方式在清单中声明BroadcastReceiver
。这很可能是你的问题,因为如果你的应用程序在后台,它可能会在内存不足的任何时刻被杀死。它在背景中的时间越长,就越有可能被杀死。
您可以在xml中声明BroadcastReceiver
,如下所示:
<receiver android:name="com.example.Receiver" >
<intent-filter>
... // Put the broadcasts you want to receive here
</intent-filter>
</receiver>
只需将其放入清单中的应用程序标记即可。
答案 1 :(得分:0)
首先,如果您在活动中注册了BroadcastReceiver
,那么当onStop()
/ onPause()
被调用时,您应该删除广播,因为如果您的应用在后台运行很长一段时间<{1}}可能被摧毁的时间。
如果您希望应用程序始终接收广播,则应在清单中注册接收方对象。
类似的东西:
Activity
然后在您的应用程序中创建一个名为<receiver android:name="com.smm.receivers.NewMessageReceiver" >
<intent-filter>
<action android:name="com.smm.action.message_received" />
</intent-filter>
</receiver>
的对象,该对象将始终处理您的广播。
希望有所帮助