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

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

Android 11 AsyncTask 非推奨 (Kotlin)

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

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

 

Asyncタスクを使った例:

private class TestAsyncTask : AsyncTask<Void, Void, Int>() {

    override fun onPreExecute() {
        super.onPreExecute()
        // 前処理
    }

    override fun doInBackground(vararg p0: Void): Int {
        // バックグラウンド処理
        return 0
    }

    override fun onPostExecute(response: Int) {
        super.onPostExecute(response)
        // 後処理
    }
}

 呼び出し側:

val testAsyncTask = TestAsyncTask()
testAsyncTask.execute()

 

Executorを使用した例:

private class TestRunnable(val onPostExecute:(Int) -> Unit) : Runnable {
    val handler = Handler(Looper.getMainLooper())

    override fun run() {
        // メイン処理

        // 後処理実行
        handler.post(Runnable {
            onPostExecute(1001)
        })
    }
}

private class TestAsyncTask {

    fun onPreExecute() {
        // 前処理

    }

    fun execute() {
        onPreExecute()
        val executorService : ExecutorService = Executors.newSingleThreadExecutor()
        executorService.submit(TestRunnable(context, ::onPostExecute)) }

    fun onPostExecute(response: Int) {
        // 後処理
    }

}

 呼び出し側:

val testAsyncTask = TestAsyncTask()
testAsyncTask.execute()