Android application development 第20章:非同期処理(Handler / AsyncTask / Coroutineの比較)

🕰 そもそも「非同期処理」って?

Androidでは、**UIスレッド(メインスレッド)**は非常に重要です。
このスレッドは画面描画やタッチイベントの処理を担っています。

重たい処理(ネットワーク通信やDBアクセスなど)をUIスレッドで実行すると、アプリが固まり「ANR(Application Not Responding)」が発生します。

そのため、UIスレッドとは別のスレッドで処理する=非同期処理が必要になります。


🧱 比較表:主要な非同期処理の手法

手法特徴使用可否備考
Handlerメインスレッドと他スレッド間でメッセージ送受信。シンプルで低レベル。◎(現在も使える)古典的。理解は重要。
AsyncTaskバックグラウンド処理とUI更新のセット。簡単に使えるが非推奨。×(API30で非推奨)今後は使わない方向。
Coroutine(Kotlin)軽量スレッド。構文がシンプルで非同期を直感的に書ける。◎(主流)Javaでは使いにくい。Kotlin前提。

🧵 Handler の使い方(Java標準的)

HandlerLooper を使ってスレッド間でメッセージやRunnableを処理する基本クラスです。

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

new Thread(() -> {
    // 重たい処理
    String result = doHeavyTask();

    // UIスレッドに結果を返す
    handler.post(() -> {
        textView.setText(result);
    });
}).start();

📌 handler.post() を使えば、メインスレッド上で安全にUI更新ができます。


AsyncTask(現在は非推奨)

一昔前までは以下のように書けました:

new AsyncTask<Void, Void, String>() {
    @Override
    protected String doInBackground(Void... voids) {
        return doHeavyTask();
    }

    @Override
    protected void onPostExecute(String result) {
        textView.setText(result);
    }
}.execute();

ですが、ライフサイクルの扱いが難しくバグの温床になるため、APIレベル30以降で非推奨となりました。今から学ぶ必要はありません。


🚀 Coroutine(Kotlin)

もし将来、Kotlinで書くことになれば、非同期処理は Coroutine が圧倒的に便利です。

lifecycleScope.launch {
    val result = withContext(Dispatchers.IO) {
        doHeavyTask()
    }
    textView.text = result
}

✅ 明示的にスレッドを切り替える必要がなく、直感的なコードで非同期処理が書けます。
※ Javaエンジニアから見ると「async/await」に近い書き心地です。


🤔 Javaエンジニアとして覚えておくべきこと

ポイント説明
Handler は基本なので知っておいて損なしスレッドとメッセージ処理の基礎になる
AsyncTask はもう使わない過去のコードで見かけたら注意して読む
Kotlinが主流ならCoroutineを検討Javaで非同期をシンプルに書きたいならKotlin移行も視野に

🧭 まとめ

  • UIスレッドは極力軽く保つことが重要。
  • 古典的:Handler(=低レベルだが柔軟)
  • 非推奨:AsyncTask(簡単だが問題あり)
  • これからの主流:Kotlin + Coroutine

mh

Related Posts

Android application development 第33章:実践ミニアプリ:天気情報アプリ

Android application development 第32章:実践ミニアプリ:シンプルなToDoリスト

You Missed

Google Cloud Platform エンジニア向け教科書:実践から認定まで : 第11章:Cloud Load Balancing:あなたのGCPリソースを「賢く振り分ける交通整理の達人」

  • 投稿者 mh
  • 6月 18, 2025
  • 9 views

Kubernetes Learning 第37章:JenkinsやGitHub ActionsからのKubernetesデプロイ例 ~CI/CDツールとKubernetesをつなげてみよう~

  • 投稿者 mh
  • 6月 17, 2025
  • 11 views

Google Cloud Platform エンジニア向け教科書:実践から認定まで : 第10章:Cloud DNS:インターネットの「電話帳」サービス

  • 投稿者 mh
  • 6月 16, 2025
  • 15 views

Kubernetes Learning 第36章:Argo CDとFluxの概要~Kubernetesの自動運用を支えるGitOpsツール~

  • 投稿者 mh
  • 6月 15, 2025
  • 30 views

Google Cloud Platform エンジニア向け教科書:実践から認定まで : 第9章:IPアドレス(外部IP、内部IP、静的IP):GCPリソースの「住所」と「電話番号」

  • 投稿者 mh
  • 6月 14, 2025
  • 28 views

Kubernetes Learning 第35章:GitOpsとは?~Kubernetes運用をもっとスマートにする考え方~

  • 投稿者 mh
  • 6月 13, 2025
  • 52 views