1

如果我的應用程序在後臺運行(服務),我偶然發現接收GCM消息的問題。在我的情況下,我沒有收到GCM消息(請注意,它不是如何接收一般的GCM,如here),ActivityManager殺死了該應用。所以我想知道我是否有概念上的誤解,或者這是一個普遍問題。後臺應用程序的GCM推送通知導致崩潰

背景

我有在前景(活動)和背景(服務)中運行的Android應用。應用程序附加到持續通知,以確保應用程序繼續運行,即使用戶打開Android TaskManager並將應用程序劃掉。該應用程序使用WakefulBroadcastReceiver和IntentService來接收和處理GCM消息(兩者都在清單文件中註冊,並設置了所有權限)。據我所知,這是Google建議的處理GCM消息的模式。類似的解決方案可以看到herehere,但如果需要,我也可以添加代碼示例。我知道Google使用API​​ 3.1更改了Android BroadcastReceiver流(例如here)。一般來說,如果我的應用程序處於前臺或僅在後臺(當活動仍然存在時),我能夠接收和處理GCM消息。

錯誤情景

  1. 用戶開始
  2. 用戶打開Android的任務管理器
  3. 用戶掃描/刪除從任務管理器中的應用(通知應用程序:應用程序服務仍在運行我的應用程序在後臺做的所有事情都能正常工作,應用程序的持續通知仍然可用)
  4. GCM推送通知將發送到設備/應用程序。
  5. 我的WakefulBroadcastReceiver沒有得到推送通知。同樣在某些設備上,應用程序死亡(持久通知也將被刪除)。在我的測試設備上,我注意到來自logcat的以下日誌,而持久通知仍在,但我的應用程序似乎不再運行(logcat中沒有應用程序的其他日誌條目): 07-20 12:46:36.930: I/GCM(1071): GCM message foo.bar.blub 0:14373891986... 07-20 12:46:36.940: I/ActivityManager(750): Killing 23750:foo.bar.blub/... (adj 0): remove task 有一些信息可用,如果應用程序被強制退出,應用程序無法處理GCM消息(例如herethis),但這不是我的情況。我的應用程序在後臺運行,只有活動被刪除。 當發生錯誤情況時,我的應用程序沒有additianal異常堆棧跟蹤可用。我沒有看到爲什麼我沒有收到GCM消息的原因,甚至沒有看到爲什麼應用程序被殺死的原因。

如果我在附加到持久通知的服務中註冊WakefulBroadcastReceiver,則會發生同樣的錯誤。

信息

谷歌宣佈了一項new way處理GCM消息,並鼓勵用戶改變。出於某些原因,我無法將其簡稱爲新方法。由於這個原因,我還沒有驗證新建議的方式。

編輯: 附加登錄-信息而切換到GcmReceiver

08-06 18:33:01.670:I/GCM(3360):GCM消息foo.bar.blub 0 :1438878778919403%9002042af9fd7ecd 08-06 18:33:01.695: 我/ ActivityManager(815):殺害4296:foo.bar.blub/u0a216(adj 0): 刪除任務... 08-06 18:33:01.909 :W/BroadcastQueue(815):例外 發送廣播至 ComponentInfo {foo.bar.blub/com.google.android.gms.gcm.GcmReceiver} 08-06 18:33:01.909:W/BroadcastQueue(815): android.os.DeadObjectException 08-06 18:33:01.909: W/BroadcastQueue(815):at android.os.BinderProxy.transactNative本地方法)08-06 18:33:01.909:W/BroadcastQueue(815):at android.os.BinderProxy.transact(Binder.java:496)08-06 18:33:01.909: W/BroadcastQueue 815):at android.app.ApplicationThreadProxy.scheduleReceiver(ApplicationThreadNative.java:861) 08-06 18:33:01.909:W/BroadcastQueue(815):at com.android.server.am.BroadcastQueue.processCurBroadcastLocked( BroadcastQueue.java:245) 08-06 18:33:01.909:W/BroadcastQueue(815):at com.android.server.am.BroadcastQueue.processNextBr oadcast(BroadcastQueue.java:898) 08-06 18:33:01.909:W/BroadcastQueue(815):at com.android.server.am.BroadcastQueue $ BroadcastHandler.handleMessage(BroadcastQueue.java:149) 08- 06 18:33:01.909:W/BroadcastQueue(815):at android.os.Handler.dispatchMessage(Handler.java:102)08-06 18:33:01.909:W/BroadcastQueue(815):at android .os.Looper.loop(Looper.java:135)08-06 18:33:01.909: W/BroadcastQueue(815):at android.os.HandlerThread.run(HandlerThread.java:61)08-06 18:33:01.909:W/BroadcastQueue(815):at com.android.server.ServiceThread.run(ServiceThread.java:46)08-06 18:33:01.909:W/libprocessgroup(815):failed to打開 /acct/uid_10216/pid_4296/cgroup.procs:沒有這樣的文件或目錄08-06 18:33:01.910:W/ActivityManager(815):調度重啓墜毀 service foo.bar.blub/.service.BubbleService在1000ms 08-06 18:33:01.958:W/ActivityManager(815):虛假死亡 ProcessRecord {26174c48 4412:foo.bar.blub/u0a216},curProc for 4296: null 08-06 18:33: 03.253:W/ctxmgr(28358):[PowerConnectionState] Got 與之前的電源連接值相同(插入狀態:2 BatteryLevel: 0.66)08-06 18:33:08.277:W/ctxmgr(28358):[PowerConnectionState]與電源連接具有相同的值(插入狀態:2 BatteryLevel: 0.66)

08-06 18: 33:01.909:W/libprocessgroup(815):無法打開 /acct/uid_10216/pid_4296/cgroup.procs:沒有此文件或目錄08-06 18:33:01.910:W/ActivityManager(815):計劃重新啓動墜毀 service foo.bar.blub/.service.BubbleService in 1000ms 08-06 18:33:01.957:​​I/art(4412):延遲啓用-Xcheck:jni 08-06 18:33:01.958: I/ActivityManager(815):Start proc 4412:foo.bar.blub/u0a216 for broadcast foo.bar.blub/com.google.android.gms.gcm.GcmReceiver 08-06 18:33:01.958:W/ActivityManager(815):虛假死亡 ProcessRecord {26174c48 4412:foo.bar.blub/u0a216},curProc for 4296: null 08-06 18:33:01。992:I/art(4412):調試器不再活動 08-06 18:33:02.024:I/GcmDataIntentService(4412):將消息推送到 進程:............. ...

是否有其他人遇到問題並找到解決方案? :-)或者我的理解錯了?

謝謝!

+0

是的。我也遇到了同樣的崩潰。我剛纔在這裏問。 http://stackoverflow.com/questions/32291478/exception-when-sending-broadcast-to-componentinfo我想很多人使用服務。不知道他們的推動如何工作... – user1165560

+0

我猜他們使用上述解決方法之一。請注意,如果您在提到的帖子中使用了建議的解決方法,則會產生一個小副作用:如果您打開任務管理器並將您的應用程序劃掉,任務管理器也會關閉。 – mheymel

回答

1

這個問題仍然會出現在Google的新建議方式中(使用GcmReceiver(com.google.android.gms.gcm.GcmReceiver)和GcmListenerService)。一般問題似乎與此bug相關。也許提到的解決方法對某人有用。

+0

我在第一條評論中嘗試瞭解決方法。它爲我工作。感謝您的信息! – user1165560

+0

是的,它一般工作。請注意我在上面評論中提到的副作用(關閉任務管理器)。你有沒有找到解決方法? – mheymel

+0

我注意到了副作用。我沒有找到解決方法:-( – user1165560

相關問題