当我的应用程序有多个活动时,如何设置GCM BroadcastReceiver?

时间:2013-09-08 19:52:20

标签: android broadcastreceiver google-cloud-messaging

我正在开发一个使用Google Cloud Messaging接收推送通知的应用程序。问题是我在“SplashActivity”中运行registerReceiver(),我用它来做一些初始工作,在GCM服务器上获取和注册。问题是当活动完成后,它会使用Intent打开MainActivity,并收到错误消息:

Activity <package>.SplashActivity has leaked IntentReceiver
<package>.GCMMessageReceiver@40ed1c38 that was originally 
registered here. Are you missing a call to unregisterReceiver()?

这里做什么?我不想在离开活动时取消注册IntentReceiver,因为我希望应用程序继续接收推送通知(即使在关闭时)。建议的方法是什么?

提前致谢:)

2 个答案:

答案 0 :(得分:1)

如果从活动中调用registerReceiver(),则它与Activity的上下文相关联。 相反,调用getApplicationContext()。registerReceiver()。

并确保您的BroadcastReciever对象不直接与SplashAcitivty绑定。即,不要使用内部(非静态)类作为BroadcastReciever对象。 我通常会将这些内容远离活动,而是在应用程序单例中进行。

答案 1 :(得分:0)

  

我希望应用继续接收推送通知(即使已关闭)

那你为什么要使用registerReceiver()?将<reciever>放入清单,例如the GCM sample demonstrates