Android 8.0のPush受信時のサービス起動について
by
hideoohashi
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Slide 1
Slide 1 text
Android 8.0のPush受信時の サービス起動について 2018/11/15 - potatotips #56 Hideo Ohashi 1
Slide 2
Slide 2 text
About Me ● Androidエンジニア8年間やってます ● 現在はスマートニュース株式会社でAndroidアプ リ開発全般に関わっています 2
Slide 3
Slide 3 text
Today’s topic ● Android 8.0対応時に発生した、Push受信時の バックグラウンドサービス起動の問題と、そこか ら学んだことの共有させていただきたいと思いま す 3
Slide 4
Slide 4 text
バックグラウンドサービスの制限 ● Android 8.0からバックグラウンドサービスの実 行に制限がつきました ○ https://developer.android.com/about/versions/oreo/background ● ただし特定の状況のときは実行制限はなくなり、 優先度高のPush受信もそのうちのひとつです 4
Slide 5
Slide 5 text
状況 ● SmartNewsではPushを受けた後に処理を Serviceに委譲し、別途画像を取得して Notificationを出していました ● Android8.0でもそのままで動作するはずが、 startService()の呼び出しで IllegalStateExceptionが発生していました 5
Slide 6
Slide 6 text
なぜだろうか? 6
Slide 7
Slide 7 text
原因(たぶん) ● 試しに優先度高のPushを受けてから60秒ほど 経った後にstartService()を呼び出したら IllegalStateExceptionが発生しました ● onReceive()では基本的にstartService()を呼び 出しているだけなので、Pushを受けてからアプリ のonReceive()が呼ばれるまでの、アプリ側から 手が出せないところで時間がかかってしまってい る可能性が高い 7
Slide 8
Slide 8 text
どう解決したか ● Serviceを使っていた理由は主に画像ダウン ロードだったので、startService()に失敗した場 合は画像なしでNotificationを出すことで解決さ せました ○ 多少の情報は落ちてもリアルタイムに表示することを優 先させました 8
Slide 9
Slide 9 text
まとめ ● 何かPushを受けてバックグラウンドサービスを 動かしたいとき、優先度高のPushでも startService()が失敗する場合があることを考え て設計・実装したほうがよさそう 9
Slide 10
Slide 10 text
ご静聴ありがとうございました 10