SlideShare a Scribd company logo
1 of 11
Download to read offline
電⼒消費考慮によるバックグラウンド実⾏の課題
⽯塚 宏紀
⽇本Androidの会
2017年11⽉定例会 Android 8 Oreoを紐解く - Android Oreo 新機能の総復習 -
Background Execution Limits
Background Location Limits	
出典:h"ps://developer.android.com/about/versions/oreo/background.html
Background Execution Limits
バックグラウンド実⾏制限
  課題(Android Nまでの)
–  Androidアプリやサービスは同時に実⾏が可能
–  多くアプリやサービスが同時にバックグラウンドで実⾏されると、シ
ステム負荷が増⼤
–  ⾳楽アプリなどユーザが利⽤中のアプリが突然シャットダウンされる
など、UX低下
  Android Oの解決策
–  ユーザーがアプリを直接操作していないときにアプリで実⾏できる動
作を制限
–  制限事項
•  バックグラウンド サービスの制限
•  ブロードキャストの制限
Background Service Limitations
バックグラウンドサービスの制限
  概要
–  バックグラウンドで実⾏されているサービスが端末のリソースを浪
費して、ユーザーエクスペリエンス低下の可能性
–  システムでは、この問題を軽減するために、サービスに対して制限
を適⽤
  foreground と background のアプリ区別基準
–  visible activityが存在(Activityがstartされているかpauseされて
いるかに関係なく)
–  foreground serviceが存在(⾳楽再⽣など想定)
–  該当アプリが、別のforegroundアプリに対して、サービスもしく
は、Content Providerを利⽤するということで接続されているいる
場合
–  例:別のアプリが次のいずれかのサービスにバインドされるとフォ
アグラウンド判定
•  IME
•  壁紙サービス
•  通知リスナー
•  ⾳声またはテキスト サービス
Background Service Limitations
バックグラウンドサービスの制限
  影響
–  アプリがforegroundにいるときは問題ないが、backgoundに移
⾏すると数分間の猶予(タイマー)が残されて、サービス作成
可能だが、タイムアウトするとアイドル状態と判定されて、OS
がサービスを停⽌(Service.stopSelf()呼び出しと同等)
–  例外:ホワイトリスト⼊条件(勝⼿終了を免れるサービス)
•  ⾼い優先度の Firebase Cloud Messaging(FCM)メッセージの処理
•  SMS/MMS メッセージなどのブロードキャストの受信。
•  通知からの PendingIntent(タイミング指定で発⾏可能なIntent)の実⾏
Background Service Limitations
バックグラウンドサービスの制限
  解決策
–  backgroundサービスを JobScheduler ジョブに置き換え
•  定期的にサーバ確認したいならbackgroundサービスではなく、
JobSchedulerで定期クエリを発⾏
  注意事項
–  Android Oでは、BackgroundアプリによるBackgroundサービ
スの作成は不可
–  Backgroundからサービス開始したい場合は
Context.startForegroundServiceメソッドを呼び出して, 5
秒以内にforegroundサービスに昇格させる必要がある
–  アプリが startForeground() を制限時間内に呼び出さない場合、
サービスが停⽌し、ANRへ…
Broadcast Limitations
ブロードキャストの制限
  課題
–  アプリがブロードキャストを受信するように登録されている場合、ブ
ロードキャストが送信されるたびにアプリのレシーバーがリソースを
浪費
–  多数アプリがシステムイベントに基づくブロードキャストの受信を登
録している場合、UX低下
–  Android Nでもブロードキャストに制限を課していたが、Android Oで
もさらに制限強化
  Android Oの解決策(制限強化策)
–  Manifestに対して、implicit broadcastsのレシーバ登録不可
•  ACTION_PACKAGE_REPLACED(暗黙的なブロードキャスト)なので×
•  ACTION_MY_PACKAGE_REPLACEDは○
  影響(例外)
–  明⽰的なブロードキャストをマニフェスト内で登録可能
–  実⾏時に Context.registerReceiver() を使って、暗黙的、明⽰的を問
わず任意のブロードキャストに対するレシーバーを登録可能
–  署名パーミッションが必要なブロードキャストは、同じ証明書で署名
されたアプリのみに送信されるため、これらのブロードキャストには
この制限は適⽤外
Broadcast Limitations
ブロードキャストの制限
  解決策
–  暗黙的なブロードキャストに対して登録していたアプリは、
JobSchedulerジョブを使⽤することで置き換え可能
–  適応の例外はコチラ
•  https://developer.android.com/guide/components/broadcast-exceptions.html
Background Location Limits
バックグラウンド位置情報の制限
  概要
–  Android 8.0 は電⼒消費を抑えるため、アプリが対象とする
SDK バージョンに関係なく、バックグラウンド アプリがユー
ザーの現在地を取得する回数を制限
–  Android 8.0 を実⾏している端末でアプリがフォアグラウンド
になっていると、位置情報のアップデートの動作は、Android
7.1.1(API レベル 25)以下での動作と同じ
  アプリにおける位置情報取得の調整
–  頻繁に位置情報を取得したい場合
•  アプリをフォアグラウンドで動作
•  startForegroundService()を呼んでアプリ内でforegroundサービスを起動
•  GeofensingAPIの要素を利⽤
Background Location Limits
バックグラウンド位置情報の制限
  影響を受けるAPI①
–  FusedLocationProvider(FusedLocationProviderClient)
•  アプリがバックグラウンドで実⾏されていると、位置検出システムサービスは、
Android 8.0 での動作変更点で定義した間隔に従い、アプリの新しい位置を 1
時間に数回だけ計算
•  アプリがフォアグラウンドで実⾏されている場合は、Android 7.1.1(API レベ
ル 25)との⽐較においても、位置情報のサンプリングレートに変更なし
–  Geofencing(GeofencingClient)
•  バックグラウンドアプリは、FusedLocationProviderからのアップデートよりも
さらに頻繁にジオフェンシング遷移イベントを受信可能
•  ジオフェンシング イベントに対する平均的な応答性は 2〜3 分毎
–  GNSS Measurements と GNSS Navigation Message
•  アプリがバックグラウンドで実⾏されていると、GnssMeasurement と
GnssNavigationMessage からの出⼒を受信するために登録されているコール
バックは実⾏を停⽌
Background Location Limits
バックグラウンド位置情報の制限
  影響を受けるAPI②
–  Location Manager
•  位置情報のアップデートは、Android 8.0 での動作変更点で定義した間隔
に従い、1 時間に数回だけバックグラウンド アプリに提供
–  Wi-Fi Manager
•  startScan() メソッドは、バックグラウンド アプリのフルスキャンを 1 時
間に 2〜3 回だけ実⾏
•  バックグラウンド アプリがフルスキャンの直後にこのメソッドを再度呼び
出した場合は、WifiManager クラスにより、前のスキャンのキャッシュさ
れた結果が提供
まとめ:バックグラウンド実⾏制限
  移⾏策
–  バックグラウンドサービスの制限
•  startService()ではなく、
NotificationManager.startServiceInForeground() を
使ってService作成
•  JobSchedulerを駆使して定期呼び出し
•  Firebase Cloud Messagingを使ってネットワーク側か
ら呼び出し
–  ブロードキャスト制限
•  Manifestでレシーバーを宣⾔するのではなく、
Context.registerReceiver() を呼び出して実⾏時にレ
シーバーを作成
•  JobSchedulerで暗黙的なブロードキャストがトリガー
された状況があったかどうかを確認

More Related Content

Similar to Background execution limits Android Oreo jag201711

Android builders summit slide tour
Android builders summit slide tourAndroid builders summit slide tour
Android builders summit slide tour
magoroku Yamamoto
 
iPhone、Android両対応アプリ開発講座 概論
iPhone、Android両対応アプリ開発講座 概論iPhone、Android両対応アプリ開発講座 概論
iPhone、Android両対応アプリ開発講座 概論
Takakuni Furukawa
 
AndroidのUI設計で押さえておきたいポイント
AndroidのUI設計で押さえておきたいポイントAndroidのUI設計で押さえておきたいポイント
AndroidのUI設計で押さえておきたいポイント
Takayuki Inoue
 
レスポンシブWebデザインによる開発効率化
レスポンシブWebデザインによる開発効率化レスポンシブWebデザインによる開発効率化
レスポンシブWebデザインによる開発効率化
亮 門屋
 
ヤフオク!の快適なカスタマー体験を支えるモバイルアプリのライブアップデート技術
ヤフオク!の快適なカスタマー体験を支えるモバイルアプリのライブアップデート技術ヤフオク!の快適なカスタマー体験を支えるモバイルアプリのライブアップデート技術
ヤフオク!の快適なカスタマー体験を支えるモバイルアプリのライブアップデート技術
Yahoo!デベロッパーネットワーク
 

Similar to Background execution limits Android Oreo jag201711 (20)

モバイルコンテンツ制作を効 率化するツールを使いこなせ
モバイルコンテンツ制作を効 率化するツールを使いこなせモバイルコンテンツ制作を効 率化するツールを使いこなせ
モバイルコンテンツ制作を効 率化するツールを使いこなせ
 
Android builders summit slide tour
Android builders summit slide tourAndroid builders summit slide tour
Android builders summit slide tour
 
AppPot製品概要
AppPot製品概要AppPot製品概要
AppPot製品概要
 
iPhone、Android両対応アプリ開発講座 概論
iPhone、Android両対応アプリ開発講座 概論iPhone、Android両対応アプリ開発講座 概論
iPhone、Android両対応アプリ開発講座 概論
 
Mobile Application Development by XPages
Mobile Application Development by XPagesMobile Application Development by XPages
Mobile Application Development by XPages
 
Engine Yard Cloud
Engine Yard CloudEngine Yard Cloud
Engine Yard Cloud
 
夏サミ2013 Hadoopを使わない独自の分散処理環境の構築とその運用
夏サミ2013 Hadoopを使わない独自の分散処理環境の構築とその運用夏サミ2013 Hadoopを使わない独自の分散処理環境の構築とその運用
夏サミ2013 Hadoopを使わない独自の分散処理環境の構築とその運用
 
Bluemixの概要とアプリの作り方
Bluemixの概要とアプリの作り方Bluemixの概要とアプリの作り方
Bluemixの概要とアプリの作り方
 
Adobe Anywhere for Video
Adobe Anywhere for VideoAdobe Anywhere for Video
Adobe Anywhere for Video
 
AndroidのUI設計で押さえておきたいポイント
AndroidのUI設計で押さえておきたいポイントAndroidのUI設計で押さえておきたいポイント
AndroidのUI設計で押さえておきたいポイント
 
Node-RED v2.0新機能紹介
Node-RED v2.0新機能紹介Node-RED v2.0新機能紹介
Node-RED v2.0新機能紹介
 
XDev2010 WindowsAzure
XDev2010 WindowsAzureXDev2010 WindowsAzure
XDev2010 WindowsAzure
 
[Cloud OnAir] アプリケーションにフォーカス!ビジネスに直結する開発の極意をご紹介します。(e-Learning) 2018年3月15日 放送
[Cloud OnAir] アプリケーションにフォーカス!ビジネスに直結する開発の極意をご紹介します。(e-Learning) 2018年3月15日 放送[Cloud OnAir] アプリケーションにフォーカス!ビジネスに直結する開発の極意をご紹介します。(e-Learning) 2018年3月15日 放送
[Cloud OnAir] アプリケーションにフォーカス!ビジネスに直結する開発の極意をご紹介します。(e-Learning) 2018年3月15日 放送
 
レスポンシブWebデザインによる開発効率化
レスポンシブWebデザインによる開発効率化レスポンシブWebデザインによる開発効率化
レスポンシブWebデザインによる開発効率化
 
ここ最近のJenkins新機能
ここ最近のJenkins新機能ここ最近のJenkins新機能
ここ最近のJenkins新機能
 
2018_02_01ヒカラボ登壇資料
2018_02_01ヒカラボ登壇資料2018_02_01ヒカラボ登壇資料
2018_02_01ヒカラボ登壇資料
 
無償でここまで使えるアドビのWeb制作ツール for デブサミ2013
無償でここまで使えるアドビのWeb制作ツール for デブサミ2013無償でここまで使えるアドビのWeb制作ツール for デブサミ2013
無償でここまで使えるアドビのWeb制作ツール for デブサミ2013
 
デバイスWebAPI実装のアップデートと利用事例について
デバイスWebAPI実装のアップデートと利用事例についてデバイスWebAPI実装のアップデートと利用事例について
デバイスWebAPI実装のアップデートと利用事例について
 
ヤフオク!の快適なカスタマー体験を支えるモバイルアプリのライブアップデート技術
ヤフオク!の快適なカスタマー体験を支えるモバイルアプリのライブアップデート技術ヤフオク!の快適なカスタマー体験を支えるモバイルアプリのライブアップデート技術
ヤフオク!の快適なカスタマー体験を支えるモバイルアプリのライブアップデート技術
 
Android api-levels
Android api-levelsAndroid api-levels
Android api-levels
 

Background execution limits Android Oreo jag201711

  • 1. 電⼒消費考慮によるバックグラウンド実⾏の課題 ⽯塚 宏紀 ⽇本Androidの会 2017年11⽉定例会 Android 8 Oreoを紐解く - Android Oreo 新機能の総復習 - Background Execution Limits Background Location Limits 出典:h"ps://developer.android.com/about/versions/oreo/background.html
  • 2. Background Execution Limits バックグラウンド実⾏制限   課題(Android Nまでの) –  Androidアプリやサービスは同時に実⾏が可能 –  多くアプリやサービスが同時にバックグラウンドで実⾏されると、シ ステム負荷が増⼤ –  ⾳楽アプリなどユーザが利⽤中のアプリが突然シャットダウンされる など、UX低下   Android Oの解決策 –  ユーザーがアプリを直接操作していないときにアプリで実⾏できる動 作を制限 –  制限事項 •  バックグラウンド サービスの制限 •  ブロードキャストの制限
  • 3. Background Service Limitations バックグラウンドサービスの制限   概要 –  バックグラウンドで実⾏されているサービスが端末のリソースを浪 費して、ユーザーエクスペリエンス低下の可能性 –  システムでは、この問題を軽減するために、サービスに対して制限 を適⽤   foreground と background のアプリ区別基準 –  visible activityが存在(Activityがstartされているかpauseされて いるかに関係なく) –  foreground serviceが存在(⾳楽再⽣など想定) –  該当アプリが、別のforegroundアプリに対して、サービスもしく は、Content Providerを利⽤するということで接続されているいる 場合 –  例:別のアプリが次のいずれかのサービスにバインドされるとフォ アグラウンド判定 •  IME •  壁紙サービス •  通知リスナー •  ⾳声またはテキスト サービス
  • 4. Background Service Limitations バックグラウンドサービスの制限   影響 –  アプリがforegroundにいるときは問題ないが、backgoundに移 ⾏すると数分間の猶予(タイマー)が残されて、サービス作成 可能だが、タイムアウトするとアイドル状態と判定されて、OS がサービスを停⽌(Service.stopSelf()呼び出しと同等) –  例外:ホワイトリスト⼊条件(勝⼿終了を免れるサービス) •  ⾼い優先度の Firebase Cloud Messaging(FCM)メッセージの処理 •  SMS/MMS メッセージなどのブロードキャストの受信。 •  通知からの PendingIntent(タイミング指定で発⾏可能なIntent)の実⾏
  • 5. Background Service Limitations バックグラウンドサービスの制限   解決策 –  backgroundサービスを JobScheduler ジョブに置き換え •  定期的にサーバ確認したいならbackgroundサービスではなく、 JobSchedulerで定期クエリを発⾏   注意事項 –  Android Oでは、BackgroundアプリによるBackgroundサービ スの作成は不可 –  Backgroundからサービス開始したい場合は Context.startForegroundServiceメソッドを呼び出して, 5 秒以内にforegroundサービスに昇格させる必要がある –  アプリが startForeground() を制限時間内に呼び出さない場合、 サービスが停⽌し、ANRへ…
  • 6. Broadcast Limitations ブロードキャストの制限   課題 –  アプリがブロードキャストを受信するように登録されている場合、ブ ロードキャストが送信されるたびにアプリのレシーバーがリソースを 浪費 –  多数アプリがシステムイベントに基づくブロードキャストの受信を登 録している場合、UX低下 –  Android Nでもブロードキャストに制限を課していたが、Android Oで もさらに制限強化   Android Oの解決策(制限強化策) –  Manifestに対して、implicit broadcastsのレシーバ登録不可 •  ACTION_PACKAGE_REPLACED(暗黙的なブロードキャスト)なので× •  ACTION_MY_PACKAGE_REPLACEDは○   影響(例外) –  明⽰的なブロードキャストをマニフェスト内で登録可能 –  実⾏時に Context.registerReceiver() を使って、暗黙的、明⽰的を問 わず任意のブロードキャストに対するレシーバーを登録可能 –  署名パーミッションが必要なブロードキャストは、同じ証明書で署名 されたアプリのみに送信されるため、これらのブロードキャストには この制限は適⽤外
  • 7. Broadcast Limitations ブロードキャストの制限   解決策 –  暗黙的なブロードキャストに対して登録していたアプリは、 JobSchedulerジョブを使⽤することで置き換え可能 –  適応の例外はコチラ •  https://developer.android.com/guide/components/broadcast-exceptions.html
  • 8. Background Location Limits バックグラウンド位置情報の制限   概要 –  Android 8.0 は電⼒消費を抑えるため、アプリが対象とする SDK バージョンに関係なく、バックグラウンド アプリがユー ザーの現在地を取得する回数を制限 –  Android 8.0 を実⾏している端末でアプリがフォアグラウンド になっていると、位置情報のアップデートの動作は、Android 7.1.1(API レベル 25)以下での動作と同じ   アプリにおける位置情報取得の調整 –  頻繁に位置情報を取得したい場合 •  アプリをフォアグラウンドで動作 •  startForegroundService()を呼んでアプリ内でforegroundサービスを起動 •  GeofensingAPIの要素を利⽤
  • 9. Background Location Limits バックグラウンド位置情報の制限   影響を受けるAPI① –  FusedLocationProvider(FusedLocationProviderClient) •  アプリがバックグラウンドで実⾏されていると、位置検出システムサービスは、 Android 8.0 での動作変更点で定義した間隔に従い、アプリの新しい位置を 1 時間に数回だけ計算 •  アプリがフォアグラウンドで実⾏されている場合は、Android 7.1.1(API レベ ル 25)との⽐較においても、位置情報のサンプリングレートに変更なし –  Geofencing(GeofencingClient) •  バックグラウンドアプリは、FusedLocationProviderからのアップデートよりも さらに頻繁にジオフェンシング遷移イベントを受信可能 •  ジオフェンシング イベントに対する平均的な応答性は 2〜3 分毎 –  GNSS Measurements と GNSS Navigation Message •  アプリがバックグラウンドで実⾏されていると、GnssMeasurement と GnssNavigationMessage からの出⼒を受信するために登録されているコール バックは実⾏を停⽌
  • 10. Background Location Limits バックグラウンド位置情報の制限   影響を受けるAPI② –  Location Manager •  位置情報のアップデートは、Android 8.0 での動作変更点で定義した間隔 に従い、1 時間に数回だけバックグラウンド アプリに提供 –  Wi-Fi Manager •  startScan() メソッドは、バックグラウンド アプリのフルスキャンを 1 時 間に 2〜3 回だけ実⾏ •  バックグラウンド アプリがフルスキャンの直後にこのメソッドを再度呼び 出した場合は、WifiManager クラスにより、前のスキャンのキャッシュさ れた結果が提供
  • 11. まとめ:バックグラウンド実⾏制限   移⾏策 –  バックグラウンドサービスの制限 •  startService()ではなく、 NotificationManager.startServiceInForeground() を 使ってService作成 •  JobSchedulerを駆使して定期呼び出し •  Firebase Cloud Messagingを使ってネットワーク側か ら呼び出し –  ブロードキャスト制限 •  Manifestでレシーバーを宣⾔するのではなく、 Context.registerReceiver() を呼び出して実⾏時にレ シーバーを作成 •  JobSchedulerで暗黙的なブロードキャストがトリガー された状況があったかどうかを確認