目次
非同期クラスって何?何のためにあるの?
Androidアプリは、「スレッド」という単位で動作しています。
この「スレッド」は、工場の生産ラインのようなものだと思ってください。
Androidは、プログラムされたとおりの内容を、
スレッドで順番に処理していきます。
「スレッド」という食品工場の生産ラインに、
「プログラムの命令(タスク)」が順番に乗って流れてくるというイメージですね。
この「スレッド」には、「UIスレッド」という種類のスレッドがあります。
「UIスレッド」は、Androidの画面の描画をするためのスレッドです。
Androidプロジェクトの新規作成をした時に用意される「MainActivity」は、
画面の描画も行っているので、「UIスレッド」ですね。
Androidでは、この「UIスレッド」に時間のかかる処理を行わせると、
クラッシュする(要するに、プログラムが停止して落ちる)という性質があります。
あまりに時間のかかる処理を行って、その間
スマホやタブレットの画面が長時間止まったままになってしまうと、
ユーザーが「スマホが壊れたんじゃないか?」とびっくりするため、
このような「自爆機能」がついているわけですね。
そこでAndroidには、時間のかかる処理(といってもわずか数秒以上です)を
行わせるため、UIスレッド以外のスレッドを立ち上げる機能があります。
それが、「非同期クラス」です。
「非同期」とは、「UIスレッドと一緒にやらずに、別々に行動するよ!」
というくらいの意味です。
この「非同期クラス」の代表格が、AsyncTaskクラスです。
どんなときに使うの?
量の膨大な計算や、重い動画の読み込みなど、
非同期クラスを使用する場面は多々ありますが、
一番良く使うパターンで、しかもわかりやすいのは、
ネットワーク処理です。
要するに、Androidアプリに、
ネット上からデータや画像を取ってこさせる場合に、
非同期クラスを使用します。
というより、Androidでは基本的に、
非同期クラスを使用しなければネットワークへの接続ができなくなっています。
(エラーになります)
AsyncTaskクラスの簡単な使い方
①AsyncTaskを用意する
public class AsyncTaskClass extends AsyncTask<String, String, String> {
@Override
protected String doInBackground (String... params) {
// バックグラウンドで行う処理
return "";
}
@Override
protected void onPostExecute(String str) {
// UIスレッドに反映する処理
}
}
doInBackgroundメソッドには、
バックグランドで行いたい処理を記述します。
例外が発生する可能性のある処理を行うには、try-catch文が必要です。
onPostExecuteメソッドは、
バックグランド処理が終わった後に、UIスレッドに反映するための処理を行います。
UIスレッドに反映するための処理は、doInBackgroundでは行なえません。
onPostExecuteには、doInBackgroundの戻り値が引数として渡されます。
②Activity(メインスレッド)から呼び出す
AsyncTaskClass task = new AsyncTaskClass();
task.execute("");
AsyncTaskクラスのインスタンスを作成し、
executeを実行。
以上です。簡単ですね。
コメントを残す