AndroidでAsyncTaskを使う方法
非同期処理をバックグラウンドで実行するためのAndroidライブラリです。非同期タスクのジェネリクス引数には、非同期タスク開始時に渡すパラメータの型、バックグラウンドで実行するタスクの進捗状況報告の型、バックグラウンドで実行するタスクの完了時に返す結果の型等を指定します。
AsyncTaskを使用する手順は次のとおりです。
- AsyncTask を継承するサブクラスを作成し、ジェネリクスパラメータの型を指定します。例: private class MyAsyncTask extends AsyncTask<Params, Progress, Result> {}
- AsyncTask の 4 つのメソッドをサブクラスでオーバーライドする。
- onPreExecute():バックグラウンド処理の実行前に呼び出され、プログレスバーの表示など、準備をするために用いられます。
- doInBackground(Params…): バックグラウンドで時間のかかる処理を行うメソッド。このメソッドはオーバーライドする必要があります。このメソッドでは、publishProgress(Progress…) メソッドを通じて進捗状況情報を公開できます。
- onProgressUpdate(Progress…):doInBackground()メソッド内でpublishProgress(Progress…)を呼び出すと、このメソッドが呼び出され、進捗情報を更新します。このメソッド内でUIなどの更新を行うことができます。
- doInBackground()メソッドの返り値をパラメータとして受け取る、バックグラウンド処理の後に呼び出される。UIを更新する処理などをこのメソッドの中で行う。
- ネイティブに日本語で言い換える場合、1 つの選択肢でのみ必要です:execute(第 N 変数…)
- new MyAsyncTask().execute(params);
AsyncTaskの使用例を示すサンプルコードを以下に示します。
private class MyAsyncTask extends AsyncTask<Void, Integer, String> {
@Override
protected void onPreExecute() {
// 在后台任务执行之前调用,可以做一些准备工作
}
@Override
protected String doInBackground(Void... voids) {
// 在后台执行耗时操作的方法
for (int i = 0; i < 100; i++) {
// 模拟耗时操作
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
// 发布进度信息
publishProgress(i);
}
return "Task Completed"; // 返回结果
}
@Override
protected void onProgressUpdate(Integer... values) {
// 在doInBackground()方法中调用publishProgress()后会调用该方法来更新进度信息
int progress = values[0];
// 更新UI等操作
}
@Override
protected void onPostExecute(String result) {
// 在后台任务执行完成后调用,可以在该方法中更新UI等操作
// result为doInBackground()方法的返回值
}
}
上記の手順によってAndroidでAsyncTaskを使って非同期操作を実行することができます。