AndroidでFatal Exception: android.app.RemoteServiceException
- 2018.09.19
- Android
現象
Android Oからバックグラウンド・サービスの制限が増えたため、アプリで以下のケースで落ちていた。
– FirebaseからPush通知を送信
– 端末側でPush通知受信時アプリを開いていた
– Pushが表示された数秒後落ちる
条件
- compileSDK:26
- targetSDK:26
- 落ちるOS:Android O
- とある事情で、FirebaseによるPush通知と2019年4月終了のGCMによるPush通知が混在
原因
- こちらのとおり、Oから実行制限がついたのでstartForegroundServiceでサービスを開始し、startForegroundでフォアグラウンド化をすればOKと思っていた
- 条件項目にあるとおり、GCMとFirebase混在状態のため
GcmIntentService.java, GcmBroadcastReceiver.java, MyFirebaseMessagingService.java, MyFirebaseInstanceIdService.javaという構成だった(2018/6/28にFirebaseInstanceIdServiceはdeperecatedになったけど別件なので置いとく) - GcmBroadcastReceiver.java内でAndroid O以上だったらstartForegroundServiceをコールし、MyFirebaseMessagingService.javaとGcmIntentService.javaの両方でstartForegroundしていたのが原因
対処
- MyFirebaseMessagingService.javaでのstartForegroundをやめてGcmIntentService.javaのみでAndroid O以上の場合にのみstartForegroundすることで掲題のエラーは回避できた。
まとめ
GCMとFirebase混在なケースというのが稀なのもあるのか、どんぴしゃな記事に巡り会えず自力解決となったので記事化しました。
-
前の記事
OSMCのヘッドレスインストール 2018.09.14
-
次の記事
AndroidでFatal Exception: java.lang.RuntimeException android.os.TransactionTooLargeException: data parcel size N bytes 2018.09.20
コメントを書く