AsyncTask

更新履歴:

  • 2022/10/16:Handler生成時の仕様が変わったので、以下の説明に反映させた(太字)

通信処理をしながら「何かをする」ときなどに使います。

例えばTwitterの送信処理。メインスレッドで処理させると、ツイート送信完了まで

画面がとまります。これではイマイチですよね。

AsyncTaskを使うときは、AsyncTaskを継承したclassを定義するところから始まります。

private class CommunicationTask extends AsyncTask<*1, *2, *3> {

@Override

protected *3 doInBackground(*1... arg_name) {

}

protected void onProgressUpdate(*2) {

...

}

protected void onPostExecute(*3) {

...

}

}

*1, *2, *3は、それぞれ「変数の型」を指定します。intとかStringとか、ユーザー定義classとか、いろいろ。

使わないところには、Void(Vは大文字で)を指定します。

次に、AsyncTaskを生成して実行します。

(new CommunicationTask()).execute();

Twitterのタイムライン取得のように、定期的に実行したいときは次のようにすればいいようです。

Handler handler = new Handler(Looper.getMainLooper());

Runnable runnable = new Runnable() {

public void run(){

(new CommunicationTask()).execute();

handler.postDelayed(this, 30000); /// 30秒後に自分自身を実行

}

};

handler.post(runnable); /// runnableを実行する(これをしないと、runnableはいつまでたっても実行されません)

上記コードは、自分で作成中のTwitterクライアントで使用中のコードからポイントを抜粋したものです。

必要に応じて、HandlerやRunnableの定義場所を工夫してください。