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の定義場所を工夫してください。