永続処理 Android Jetpack の一部。
アプリの再起動やシステムの後もスケジュールが維持されると、作業は永続的に保持される できます。WorkManager は、永続処理に推奨されるソリューションです。 ほとんどのバックグラウンド処理は永続処理によって行うのが最適であるため、 そのため、WorkManager はバックグラウンド処理用の主要な推奨 API で 一般的な処理です
永続処理の種類
WorkManager は、次の 3 種類の永続処理を扱います。
- 即時: すぐに開始してすぐに完了する必要があるタスク。優先されることがあります。
- 長時間実行: より長く実行される可能性のあるタスク 10 分。
- 延期可能: 後で開始して定期的に実行できる、スケジュール設定されたタスク。
図 1 に、種々の永続処理の間の関係を示します。
同様に、次の表にさまざまな処理の概要を示します。
タイプ | 周期 | アクセス方法 |
---|---|---|
即時 | 1 回限り | OneTimeWorkRequest と Worker 。優先処理については、OneTimeWorkRequest で setExpedited() を呼び出します。 |
長時間実行 | 1 回限りまたは定期的 | 任意の WorkRequest または Worker 。Worker で setForeground() を呼び出して通知を処理します。 |
延期可能 | 1 回限りまたは定期的 | PeriodicWorkRequest 、Worker 。 |
WorkManager の設定方法について詳しくは、WorkRequest の定義ガイドをご覧ください。
WorkManager の機能
WorkManager には、よりシンプルで一貫性のある API を提供するという点だけでなく、次のような重要なメリットがあります。
処理の制約
処理の制約を使用して、処理の実行に最適な条件を宣言的に定義します。たとえば、デバイスが定額制ネットワークにつながっているとき、アイドル状態のとき、バッテリー残量が十分であるときにのみ実行します。
強力なスケジュール設定
WorkManager では、柔軟なスケジューリング ウィンドウを使用して、1 回限りまたは繰り返し実行するように処理のスケジュールを設定できます。処理にタグや名前を付けて、一意で置き換え可能な処理のスケジュール設定、処理グループのモニタリングやキャンセルをまとめて行うことができます。
スケジュール設定された処理は、内部で管理されている SQLite データベースに保存されます。WorkManager により、デバイスの再起動後もこの処理が確実に保持され、スケジュールの再設定が行われます。
また、WorkManager は Doze モードなどの省電力機能やベスト プラクティスに従うため、電力消費を気にする必要はありません。
優先処理
WorkManager を使用すると、バックグラウンドでの実行の即時処理をスケジュール設定できます。ユーザーにとって重要な、数分以内に完了するタスクには、優先処理を使用する必要があります。
柔軟な再試行ポリシー
処理は失敗することもあります。WorkManager には、設定可能な指数バックオフ ポリシーなど、柔軟な再試行ポリシーが用意されています。
処理の連結
複雑な作業の場合は、直感的なインターフェースを使用して個々の処理タスクを連結することにより、どの部分を順次実行し、どの部分を並列実行するかを制御できます。
val continuation = WorkManager.getInstance(context)
.beginUniqueWork(
Constants.IMAGE_MANIPULATION_WORK_NAME,
ExistingWorkPolicy.REPLACE,
OneTimeWorkRequest.from(CleanupWorker::class.java)
).then(OneTimeWorkRequest.from(WaterColorFilterWorker::class.java))
.then(OneTimeWorkRequest.from(GrayScaleFilterWorker::class.java))
.then(OneTimeWorkRequest.from(BlurEffectFilterWorker::class.java))
.then(
if (save) {
workRequest<SaveImageToGalleryWorker>(tag = Constants.TAG_OUTPUT)
} else /* upload */ {
workRequest<UploadWorker>(tag = Constants.TAG_OUTPUT)
}
)
WorkManager.getInstance(...)
.beginWith(Arrays.asList(workA, workB))
.then(workC)
.enqueue();
処理タスクには、それぞれ入出力データを定義できます。処理を連結すると、WorkManager により、ある処理タスクの出力データが自動的に次の処理タスクに渡されます。
組み込みのスレッド化の相互運用性
WorkManager はコルーチンや RxJava とシームレスに統合し、独自の非同期 API に接続するための柔軟性を提供します。
処理の信頼性を高めるために WorkManager を使用する
WorkManager は、ユーザーが画面から移動した場合、アプリが終了した場合、デバイスが再起動された場合でも、確実に実行する必要がある処理を対象としています。次に例を示します。
- ログやアナリティクスをバックエンド サービスに送信する
- アプリデータをサーバーと定期的に同期する
WorkManager は、アプリプロセスが終了しても安全に終了できるインプロセス バックグラウンド処理を対象としていません。また、直ちに実行する必要があるすべての処理を対象とした一般的なソリューションでもありません。バックグラウンド処理ガイドでニーズを満たすソリューションを見つけてください。
他の API との関係性
コルーチンは特定のユースケースで推奨されるソリューションですが、 永続的な処理には使用しないでください注意すべき点として、コルーチンは 同時実行フレームワークであるのに対し、WorkManager は 説明します。同様に、AlarmManager は時計またはカレンダーにのみ使用してください。
API | 推奨する用途 | WorkManager との関係 |
---|---|---|
コルーチン | 永続的である必要のない非同期処理。 | コルーチンは、Kotlin でメインスレッドを離れる標準的な方法です。ただし、アプリが閉じられるとメモリを離れます。永続処理には WorkManager を使用します。 |
AlarmManager | アラームのみ。 | WorkManager とは異なり、AlarmManager はデバイスを Doze モードから復帰させます。そのため、電源とリソースの管理という点では効率的ではありません。バックグラウンド処理ではなく、正確なアラームやカレンダーの予定などの通知にのみ使用します。 |
非推奨の API を置き換える
WorkManager API は、以前のすべての Android
バックグラウンド スケジューリング API(FirebaseJobDispatcher
など)
GcmNetworkManager
、JobScheduler
。
始める
アプリで WorkManager の使用を開始するには、スタートガイドをご覧ください。
参考情報
以降のセクションでは、その他の参考情報を紹介します。
動画
- Workmanager - MAD スキル、動画シリーズ
- WorkManager の操作(2018 年の Android Dev Summit)
- WorkManager: 基本を超えて(2019 年の Android Dev より) サミット
ブログ
サンプル
Mir 2: Return of the King は、Actoz Soft がライセンスを付与し、 HK ZHILI YAOAN LIMITED が Unity ゲームエンジンを使用して開発した、高品質の Legend IP モバイルゲームです。 このゲームは、韓国のファンタジー MMORPG を代表する Mir 2 の雰囲気を完璧に再現するだけでなく、装備の収集、大規模な砂攻撃、その他のコア ゲームプレイなど、最も人気のあるゲーム コンテンツも数多く提供しています。 Wuthering Waves は、Kuro Games が開発した高品質のアクション RPG ゲームです。長時間のゲーム セッションでプレミアムなユーザー エクスペリエンスを持続的に提供するには、消費電力を最適化することが非常に重要です。 Android Studio では、Hedgehog(2023.1.1)から Power Profiler が導入されました。これは、デベロッパーが On Device Power Rails Godot Engine は、Android を堅牢にサポートする人気の高いマルチプラットフォームのオープンソース ゲームエンジンです。Godot は、ほぼすべてのジャンルのゲームの作成に使用でき、2D グラフィックと 3D グラフィックの両方に対応しています。Godot バージョン 4 では、高忠実度グラフィック向けの高度な機能を備えた新しいレンダリング システムが導入されました。Godot 4 レンダラは、Vulkan などの最新のグラフィック API 向けに設計されています。 Godot Android Dynamic Performance Framework(ADPF)は、アプリケーションのパフォーマンスを最適化したいデベロッパー向けの Google の強力なツールです。ADPF は、サーマル API を介してデバイスの熱状態に関するリアルタイム情報を提供します。この情報は、アプリのグラフィック設定の調整に使用されます。 研究目的で、Arm は Unreal Engine と ADPF を使用してデモを開発し、ADPF NCSoft Lineage W は、NCSoft が開発した大規模多人数同時参加型オンライン ロールプレイング ゲーム(MMORPG)です。このゲームは、元の Lineage W ゲームの遺産を受け継いでおり、世界中のプレーヤーがグローバル サーバーを通じて協力して競い合うことができる環境を提供します。独自の中世ファンタジーの世界を舞台とする Lineage W は、さまざまなクラス、スキル、戦闘システムを通じて、プレイヤーに深いゲーム体験を提供します。 NCSoft は Android パフォーマンスと温度管理の改善は、Android で成功するゲームを開発するために不可欠です。従来、デベロッパーはゲームの忠実度を下げるかレンダラをさらに最適化することで、こうした問題に対処する必要がありました。こうした変更はゲームに固有の傾向があり、多くの場合、柔軟性に欠けます。 Android エコシステムには、アダプティブ パフォーマンス API がデベロッパーに提供されています。アダプティブ パフォーマンス機能の統合を簡素化し、エコシステムの断片化を減らすために、Google と Call of Duty: Warzone Mobile は、人気の コール オブ デューティ シリーズのファースト パーソン アクション ゲームです。非常に人気のあるコンソール ゲームと PC ゲームをモバイルで実現する場合は、モバイルの低レベル API を活用して、優れたプレーヤー エクスペリエンスを提供します。 技術的な観点から見ると、モバイル実装の目標は、幅広い Android モバイル デバイスをサポートすると同時に、コンソール バージョンに可能な限り近い形で実装を維持し、グラフィック サマナーズウォー: クロニクル は、韓国のゲーム デベロッパー Com2uS が 2023 年 3 月に全世界でリリースしたモバイル MMORPG です。これまでに『サマナーズウォー: Sky Arena』は全世界で 1 億 8, 000 万回以上ダウンロードされ、収益は 27 億ドルを超えています。ファンタジーの世界を舞台にさまざまなモンスターを集めてトレーニングし、他のプレーヤーと戦うサマナーズウォーは、世界で最も人気のあるモバイルゲームの一つです。 約 10 Com2uS の Summoners War: Chronicles US(WW) と KR では、Android でのレンダリングに Vulkan のみを使用し、パフォーマンスが最大 30% 向上しています。 Vulkan は、デバイスのグラフィック ハードウェアとゲームの間の抽象化を最小限に抑えるために設計された最新のクロス プラットフォーム 3D グラフィック API です。Vulkan は OpenGL ES と比較して CPU オーバーヘッドが少なく、Vulkan Ares: Rise of Guardians は、アクション RPG シリーズの開発実績で知られる韓国のゲームスタジオ Second Dive が開発したモバイルから PC への SF MMORPG です。このゲームは Kakao Games によって公開されています。 Cat Daddy Games は、ワシントン州カークランドに拠点を置く 2K 完全所有のスタジオで、NBA 2K Mobile のデベロッパーです。チームは、特に「アプリケーション応答なし」エラー(ANR)を減らすことで、ゲームの全体的な品質と安定性を改善する必要がありました。ANR は、Android アプリの UI スレッドが長時間ブロックされると発生します。そのような場合、UI Devsisters はグローバルなモバイルゲーム デベロッパー兼パブリッシャーで、Cookie Run IP に基づいてカジュアル ゲームを制作しています。特に人気の高いゲームには Cookie Run: OvenBreak (ランニング アーケード)や Cookie Run: Kingdom (ソーシャル RPG)などがあり、韓国、台湾、米国のユーザーをはじめ、世界中のユーザーに愛されています。Cookie Run: OvenBreak はカジュアル ゲームですが、5 NEW STATE Mobile は Krafton のバトルロイヤル ゲームで、2021 年 11 月に全世界でリリースされ、リリース 1 か月で 4, 500 万回以上ダウンロードされました。KRAFTON, Inc. は、独立系ゲーム開発スタジオの集合体で、世界中のゲーマーに革新的で魅力的なエンターテイメント体験を生み出しています。PUBG Studios、Bluehole Studio、Striking Distance ポーランドを拠点とする Spokko は、要求の厳しい IP を扱っている意欲的なクリエイターのグループです。Spokko は CD PROJEKT ファミリーの一員ですが、独立企業として『 The Witcher: Monster Slayer ] の素晴らしい世界をスマートフォンに移しました。 ウィッチャー: モンスター スレイヤーは、拡張現実技術を使ったロケーション ベースの RPG ゲームです。このゲームは計算負荷の高いゲームであり、多くのデバイスに挑戦する必要があります。Spokko Cat Daddy Games は、ワシントン州カークランドに拠点を置く 2K 完全所有のスタジオです。NBA 2K Mobile、NBA SuperCard、WWE SuperCard シリーズのチームは、特にユーザーをサポートするデバイスに高品質のアセットを提供することで、ユーザーに提供するゲームの全体的な品質を向上させるソリューションを探していました。 同社は Play Asset Delivery を実装し、各ユーザーのデバイス設定に合わせて最適化された APK Electronic Arts (EA)は、米国カリフォルニア州に本社を置くゲーム会社です。スポーツ、アクション、レース、シミュレーションなど、さまざまなジャンルのゲームが幅広く製造されています。EA の開発スタジオである Firemonkeys は、 Real Racing 3 、 The Sims FreePlay 、 Need For Speed: No Limits のデベロッパーとしてよく知られています。Firemonkeys は、カスタム Unreal Engine は、Epic Games が開発したゲームエンジンです。あらゆる業界のクリエイターが、最先端のエンターテイメント、魅力的な可視化、没入感のある仮想世界を自由かつ制御できるようにします。一部の主要な Android ゲームは Unreal Engine を使用して構築されています。 図 1. Google Pixel 4 で実行されている Unreal Engine Suntemple のサンプルのスクリーンショット Epic などのゲーム ポーランドのワルシャワを拠点とするゲーム デベロッパー、CD Projekt RED(CDPR)は、ウィッチャー 3 内のミニゲーム「 グウェント ウィッチャーカードゲーム 」を一新し、2020 年 3 月に Google Play でスタンドアロンの無料ゲームとしてリリースしました。ファイルサイズの初期値が大きく、定期的なアップデートで追加のデバイス 2000 年、 Gameloft は、ゲームへの情熱と、世界中のプレーヤーにゲームを届けたいという思いから誕生しました。同社はモバイル向けゲーム開発の先駆的企業であり、現在では 190 本以上のゲームを提供しています。Gameloft のモバイルゲームの多くは、グラフィックが多用されているためにダウンロード サイズが大きくなっていました。そのため、同社にとって、App Bundle インフラストラクチャを基盤とするゲームサービス向けの配信機能のセットである Google Play Asset 米国を拠点とするデベロッパー RV AppStudios は、カジュアル ゲーム、子供向け教育アプリ、ユーティリティ アプリのポートフォリオ全体で、これまでに 2 億回以上のダウンロード数を誇っています。開発チームは、同社のアプリ Puzzle Kids - Animals Shape and Jigsaw Puzzles を Google Play Asset Delivery Gameloft は 20 年以上にわたり、モバイルゲームから PC やゲーム機のクロス プラットフォームのゲームに至るまで、デジタル プラットフォーム向けに革新的なゲーム エクスペリエンスを創出してきました。Gameloft は、独自の確立されたシリーズに加え、LEGO、Universal、Hasbro などの人気ブランドのゲームを開発しています。世界 3,600 人のチームを擁する同社のゲームは、毎月 100 か国以上で 5, 500 万人のユニーク プレーヤーに利用されています。 2018 モスクワを拠点とするゲーム開発会社の Pixonic は、モバイルアプリをアップグレードしてさらに多くのゲーマーにリーチできるよう日々努めています。同社の最も有名なタイトルのひとつである War Robots は、12 人のプレーヤー対プレーヤー(PvP)で、カスタマイズしたロボットを操作して戦闘を行えるゲームです。 2014 年のリリース当初、War Robots は初期の Android Gameloft は、常に最新のポータブル ハードウェアに対応したいち早くゲームを提供し、外出先でもゲームにワクワクするようなエクスペリエンスを提供できるよう努めています。同社は、モバイル レーシング シリーズの最新作品、 アスファルト 8: Airborne を、ChromeOS で開発するのが一番だと考えました。 Gameloft は複数のデバイス向けのゲーム開発に慣れていましたが、アスファルトの操作性を Chromebook に移植するのは難しいと思われました。ChromebookMir 2 で Frame Pacing ライブラリを使用してレンダリング パフォーマンスを改善
Kuro Games が Android Studio Power Profiler と ODPM を使用して Wuthering Waves の消費電力を 9.68% 削減
Android 向け Godot Engine Vulkan の最適化
Unreal Engine での Android Dynamic Performance Framework(ADPF)のスタートガイド
NCSoft の Lineage W が ADPF を使用して持続的なパフォーマンスを向上させ、サーマル スロットリングを回避
MediaTek が Android SoC の動的パフォーマンスを強化
Call of Duty Warzone Mobile で Vulkan を使用してグラフィックを改善
Com2uS - PC 版 Google Play Games
Com2uS が Vulkan を使用してグラフィックを改善
Kakao Games: Android への適応性により FPS の安定性が 96% 向上
2K は Android Game Development Kit を使用して ANR 発生率を 35% 削減
クッキーラン: オーブンブレイク - Play Asset Delivery で CDN コストを 20 万ドル以上削減
NEW STATE Mobile、Android GPU Inspector を使用して GPU 使用率を 22% 削減
The Witcher: Monster Slayer - Android Performance Tuner でリーチを拡大
2K が Play Asset Delivery で高品質のグラフィックを実現
Firemonkeys は AGDE を使用して開発とデバッグの時間を短縮
「AGDE はすごい!」Unreal Engine による Android 開発に最適
CD Projekt RED: Play Asset Delivery でアップデート サイズを 90% 削減し、アップデート率が 10% 向上
Gameloft、Google の Play Asset Delivery により新規ユーザーが 10% 増加
RV AppStudios、Google の Play Asset Delivery でユーザー維持率を改善
Gameloft の事例: Game Mode API を使用してデバイスの消費電力を 70% 削減し、プレイ時間を 35% 延長
Pixonic: 大画面向けに最適化することで ChromeOS でエンゲージメントを 25% 増加
Gameloft の事例: ChromeOS 向けに最適化することで収益を 9 倍に拡大