我有GCM完全工作。我的問題是,當我用android BACK鍵退出我的應用程序時,我看到了onDestroy()調用並避免泄漏,我未註冊gcm的接收器,因此調用了onUnregister()。但是我希望能夠在開機後註冊gcm(啓動完成?),然後隨時可以收到通知。我知道當谷歌可能刷新註冊意圖時,我仍然需要處理。但我不清楚我是否需要在onCreate()中註冊gcm的新服務?現在我在主活動的onCreate()中註冊gcm。GCM生命週期混亂,想要永遠註冊
感謝您的任何幫助!
賈斯汀
我有GCM完全工作。我的問題是,當我用android BACK鍵退出我的應用程序時,我看到了onDestroy()調用並避免泄漏,我未註冊gcm的接收器,因此調用了onUnregister()。但是我希望能夠在開機後註冊gcm(啓動完成?),然後隨時可以收到通知。我知道當谷歌可能刷新註冊意圖時,我仍然需要處理。但我不清楚我是否需要在onCreate()中註冊gcm的新服務?現在我在主活動的onCreate()中註冊gcm。GCM生命週期混亂,想要永遠註冊
感謝您的任何幫助!
賈斯汀
不看你的代碼,這是一個有點難以啓齒,但你不應該從GCM註銷每次你離開應用程序。一個典型的GCM應用程序生命週期(如果你使用的是GCM JAR)將以下內容:
4號很可能會從GCM當他們關閉註銷登記從接收通知中取消註冊的首選項。
看看谷歌的客戶樣品DemoActivity:http://code.google.com/p/gcm/source/browse/samples/gcm-demo-client/src/com/google/android/gcm/demo/app/DemoActivity.java
注意,他們不從GCM註銷。如果你遵循他們的樣本,你將在設備啓動後收到通知,而無需自己做任何事情。
好的,謝謝。我開始重新評估演示客戶端代碼。我將更新我的代碼以使用GCMRegistrar()。在我可以使用之前,我已經完成了這一切?因此,基於這些代碼,如果你的應用程序被完全摧毀,然後的onCreate()再次調用,調用函數GCMRegistrar.getRegistrationId()將有希望告訴你,如果它已經太長,GCM不知道您的手機註冊了。 – Eradicatore
因此,我重構了我的應用程序以快速使用GCMRegistrar,並且在我的第一個出口上抱怨了一次GCM廣播接收器泄漏。但之後,它再也沒有抱怨過。它絕對保持註冊。所以我想這很好,但我仍然需要玩一下,以確保我不會錯過任何東西。我看到這兒的另線程(http://stackoverflow.com/questions/11299312/leaked-intentreceiver-in-google-cloud-messaging),所以我加入GCMRegistrar.onDestroy()從我的主要活動的調用的onDestroy()和它仍然沒有調用註銷。 – Eradicatore
是的,就是這樣做的。如果您獲得空白的註冊ID,則需要再次註冊GCM。確定您是否仍在服務器上註冊也是如此。至於泄漏,我認爲我轉而使用應用上下文來避免這種情況。 – selsine