1 00:00:00,140 --> 00:00:02,330 レッスン2を思い出してください 2 00:00:02,330 --> 00:00:07,580 キャサリンがRefreshボタンに結びつけられた AsyncTaskを使ってデータをアップデートしました 3 00:00:07,580 --> 00:00:10,290 レトはそれがまずいと言っていました 4 00:00:10,290 --> 00:00:14,620 AsyncTaskはActivityのライフサイクルと 無関係だからです 5 00:00:14,620 --> 00:00:18,540 仮想マシンはAsyncTaskが実行している限り 6 00:00:18,540 --> 00:00:20,620 Activityオブジェクトを持ち続けます 7 00:00:20,620 --> 00:00:24,370 たとえAndroidがActivityに対して onDestroyを呼び出して 8 00:00:24,370 --> 00:00:25,910 破棄されると期待してもです 9 00:00:25,910 --> 00:00:27,580 スマートフォンを回転すると 10 00:00:27,580 --> 00:00:31,700 Activityを破棄して 新たなインスタンスを作成します 11 00:00:31,700 --> 00:00:34,830 単純なAsyncTaskを実装すると 12 00:00:34,830 --> 00:00:38,160 同じアップデートを実行しようとする 2つのスレッドができ それを繰り返します 13 00:00:38,160 --> 00:00:40,580 つまり Webサービスから取得する時のような 14 00:00:40,580 --> 00:00:45,580 長時間にわたる可能性のある バックグラウンド作業には最良ではないのです 15 00:00:45,580 --> 00:00:47,080 アプリをそのままにしておくと 16 00:00:47,080 --> 00:00:51,200 AsyncTaskはプロセスが生きている限り 実行し続けますが 17 00:00:51,200 --> 00:00:53,160 優先度は低い状態であり 18 00:00:53,160 --> 00:00:57,080 デバイスがリソースを必要とした場合 皆さんのプロセスが終了させられます 19 00:00:57,080 --> 00:00:59,120 さらに大きな問題は 20 00:00:59,120 --> 00:01:00,620 最初にタスクのインスタンスを作成するためには 21 00:01:00,620 --> 00:01:04,250 アプリがフォアグラウンドで 実行されている必要があります 22 00:01:04,250 --> 00:01:08,580 アプリ開始時に天気をアップデートする目的で タスクを開始したので 23 00:01:08,580 --> 00:01:12,580 天気が早く変化すると 好ましくない動きをするかもしれません 24 00:01:12,580 --> 00:01:15,580 ではアップデートの正しい実行方向を学びましょう 25 00:01:15,580 --> 00:01:19,660 アプリがフォアグラウンドにある間 プロセスを自動化します 26 00:01:19,660 --> 00:01:21,580 しかしもっと重要なのは 27 00:01:21,580 --> 00:01:26,080 バッテリ消費を最少にして バックグラウンドで 規則的にアップデートさせることです 28 00:01:26,080 --> 00:01:28,660 これは このレッスンの後半で 天気のNotificationを導入する時に 29 00:01:28,660 --> 00:01:31,450 特に重要になるでしょう