AsyncTask
AsyncTask
重い処理をバックグラウンドのスレッドで、簡単に実行する事ができる便利クラス。
ThreadクラスとかHandlerクラスを扱わずに済む。
・使い方
AsyncTaskを継承するクラスを作成する。
(ジェネリクスの指定は、
そのクラスで、所定のタイミングで呼び出されるメソッドをオーバーライドする。
(doInBackgroundだけは必須。abstractメソッドだから)
UIスレッドで、インスタンス化し、executeメソッドを呼ぶ。
・実装するメソッド
onPreExecute
executeメソッド実行直後に、UIスレッド上で実行される。
プログレスダイアログの準備等の初期化を行う。
doInBackground
onPreExecute実行後に、バックグラウンドのスレッド上で実行される。
executeメソッドの引数が渡される。
onProgressUpdate
doInBackgroundメソッドの中で、publishProgressメソッドを呼び出すことで実行される。
UIスレッド上で実行される。処理の進捗をUIに反映させるために使う。
onPostExecute
doInBackground実行後に、UIスレッドで実行される。
doInBackgroundの戻り値が、引数として渡される。
・タスクのキャンセル
cancelメソッドを呼ぶ事で、executeした後にタスクをキャンセルできる。
cancelメソッドを呼ぶと、isCancelledメソッドの戻り値がtrueになるので、
doInBackgroundメソッドの中でその値を監視する。
キャンセルされるとonPostExecuteの代わりにonCanncelledメソッドが実行される。
・厳守事項
AsyncTaskを継承したクラスのインスタンス化はUIスレッドで行う事。
executeメソッドの呼出しは、UIスレッドで行う事。
実装したメソッドを直接呼び出してはいけない。
executeメソッドの呼出しは、一度しか行えない。
(もう一度処理したければ、インスタンス化を再度行う。)