Android 8.0のPush受信時のサービス起動について
by
hideoohashi
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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