Androidで非同期処理を行う場合はAsyncTaskを使おう

こんにちは!ぐちです。

そもそもなんて読むの?

AsyncTaskは「非同期の」という意味を表すasynchronousの省略形と「仕事・作業」を表すtaskがくっついた造語ですね。読み方は「エイシンクロナス」らしいです。「アシンクタスク」って言っていましたが本来の単語の読み方でいくなら「エイシンクタスク」らしいです。
まぁどっちでもいいですね。笑

どうやって使う?

では早速Androidでの非同期処理の方法をご説明します。

まずは非同期処理を行うためのタスククラスを作成します。

今回はHoge.javaというファイルに下記のクラスを作成します。

public class HogeTask extends AsyncTask<String, Integer, Boolean> {
    @Override
    protected void onPreExecute() {
        
    }

    @Override
    protected Boolean doInBackground(String... params) {
        return true;
    }

    @Override
    protected void onPostExecute(Boolean result) {
        
    }
}

オーバーライドが必須なのはdoInBackgroundメソッドのみです。このメソッドがメインスレッドではなくワーカースレッドと呼ばれる非同期の処理を行うスレッドになります。onPreExecuteメソッドはメインスレッドで実行される非同期処理の前処理等を行うためのメソッドです。onPostExecuteメソッドもメインスレッドで実行される非同期処理後の後処理等を行うためのメソッドです。

AsyncTaskクラスの型宣言は1つめがdoInBackgroundメソッドに渡される引数の型です。HogeTaskを実行するときにコール元から渡すデータの型ですね。2つめが進行度を更新する際にonProgressUpdateに渡される引数の型です。3つめが非同期処理の結果onPostExecuteに渡される引数の型です。

では次に非同期処理を担っているHogeTaskの呼び出し方ですね。

HogeTask task = new HogeTask();
task.execute(new String[] { "param1", "param2", "param3" });

executeメソッドを呼ぶことでHogeTaskクラスのdoInBackgroundメソッドが実行されます。ここでポイントが引数です。String型の配列になっていますね。doInBackgroundメソッドの定義を見ても可変引数になっています。
上記の呼び出し方をすればonPreExecuteメソッド→doInBackgroundメソッド→onPostExecuteメソッドの順番に処理が流れます。doInBackgroundメソッドで返却した値がonPostExecuteメソッドの引数に渡ります。

少し長くなりましたが非同期処理の流れは非常に重要です。Androidアプリの開発時にはこれでバッチリですね。

※ コードに誤りがあるかもしれませんがご了承ください。