WEBVTT 00:00:00.140 --> 00:00:02.330 レッスン2を思い出してください 00:00:02.330 --> 00:00:07.580 キャサリンがRefreshボタンに結びつけられた AsyncTaskを使ってデータをアップデートしました 00:00:07.580 --> 00:00:10.290 レトはそれがまずいと言っていました 00:00:10.290 --> 00:00:14.620 AsyncTaskはActivityのライフサイクルと 無関係だからです 00:00:14.620 --> 00:00:18.540 仮想マシンはAsyncTaskが実行している限り 00:00:18.540 --> 00:00:20.620 Activityオブジェクトを持ち続けます 00:00:20.620 --> 00:00:24.370 たとえAndroidがActivityに対して onDestroyを呼び出して 00:00:24.370 --> 00:00:25.910 破棄されると期待してもです 00:00:25.910 --> 00:00:27.580 スマートフォンを回転すると 00:00:27.580 --> 00:00:31.700 Activityを破棄して 新たなインスタンスを作成します 00:00:31.700 --> 00:00:34.830 単純なAsyncTaskを実装すると 00:00:34.830 --> 00:00:38.160 同じアップデートを実行しようとする 2つのスレッドができ それを繰り返します 00:00:38.160 --> 00:00:40.580 つまり Webサービスから取得する時のような 00:00:40.580 --> 00:00:45.580 長時間にわたる可能性のある バックグラウンド作業には最良ではないのです 00:00:45.580 --> 00:00:47.080 アプリをそのままにしておくと 00:00:47.080 --> 00:00:51.200 AsyncTaskはプロセスが生きている限り 実行し続けますが 00:00:51.200 --> 00:00:53.160 優先度は低い状態であり 00:00:53.160 --> 00:00:57.080 デバイスがリソースを必要とした場合 皆さんのプロセスが終了させられます 00:00:57.080 --> 00:00:59.120 さらに大きな問題は 00:00:59.120 --> 00:01:00.620 最初にタスクのインスタンスを作成するためには 00:01:00.620 --> 00:01:04.250 アプリがフォアグラウンドで 実行されている必要があります 00:01:04.250 --> 00:01:08.580 アプリ開始時に天気をアップデートする目的で タスクを開始したので 00:01:08.580 --> 00:01:12.580 天気が早く変化すると 好ましくない動きをするかもしれません 00:01:12.580 --> 00:01:15.580 ではアップデートの正しい実行方向を学びましょう 00:01:15.580 --> 00:01:19.660 アプリがフォアグラウンドにある間 プロセスを自動化します 00:01:19.660 --> 00:01:21.580 しかしもっと重要なのは 00:01:21.580 --> 00:01:26.080 バッテリ消費を最少にして バックグラウンドで 規則的にアップデートさせることです 00:01:26.080 --> 00:01:28.660 これは このレッスンの後半で 天気のNotificationを導入する時に 00:01:28.660 --> 00:01:31.450 特に重要になるでしょう