ともちゃんのアプリ開発日記

組込みC言語プログラマだったともちゃんが、四苦八苦しながら、AndroidのJAVA/Kotlin、iOSのSwiftUIを習得して行きます。ともちゃんの備忘録も兼ねています。

Android 11 AsyncTask 非推奨 (Java)

Android 11でAsyncTaskが非推奨になりました。

なので、java.util.concurrentのExecutorを使って書き換えました。

 

Asyncタスクを使った例:

public static class AsyncExportProgress extends AsyncTask<Void, Void, String> {

ProgressBar progressBar;
Snackbar snackbar;

@Override
protected void onPreExecute() {
// ここに前処理を記述します
// 例) プログレスダイアログ表示
}

@Override
protected String doInBackground(Void... arg0) {
// バックグラウンド処理
}

@Override
protected void onPostExecute(String result) {
// バックグランド処理終了後の処理をここに記述します
// 例) プログレスダイアログ終了
}
}

 

呼び出し側:

AsyncExportProgress asyncExportProgress = new AsyncExportProgress();
asyncExportProgress.execute();

 

Executorを使用した例:

private static class AsyncExportProgress {

ProgressBar
progressBar;
Snackbar
snackbar;

private class AsyncRunnable implements Runnable {

private String strResult;

Handler
handler = new Handler(Looper.getMainLooper());
@Override
public void run() {
// ここにバックグラウンド処理を書く

handler.post(new Runnable() {
@Override
public void run() {
onPostExecute(
strResult);
}
});
}
}

void onPreExecute() {
 
// ここに前処理を記述します
// 例) プログレスダイアログ表示
}

void execute() {
onPreExecute();
ExecutorService executorService = Executors.
newSingleThreadExecutor();
executorService.submit(
new AsyncRunnable());
}

void onPostExecute(String result) {
// バックグランド処理終了後の処理をここに記述します
// 例) プログレスダイアログ終了
}
}

呼び出し側:

AsyncExportProgress asyncExportProgress = new AsyncExportProgress();
asyncExportProgress.execute();