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

Kubernetes Learning 第32章:Helmの基本操作(install, upgrade, rollback)~マニフェスト管理をもっと効率よく、自動化するために~

  • 投稿者 mh
  • 6月 5, 2025
  • 3 views

現場で使えるChrome DevTools実践ガイド 第11章:アクセシビリティの確認

  • 投稿者 mh
  • 6月 5, 2025
  • 7 views

Google Cloud Platform エンジニア向け教科書:実践から認定まで : 第5章:Cloud SDKとgcloudコマンド:GCPを「キーボードから操る」魔法のツール

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

Kubernetes Learning 第31章:コンテナのセキュリティ対策(PodSecurityなど)~Kubernetes環境を守るために最低限知っておきたいこと~

  • 投稿者 mh
  • 6月 4, 2025
  • 20 views

現場で使えるChrome DevTools実践ガイド 第10章:Device Modeでのレスポンシブ検証

  • 投稿者 mh
  • 6月 4, 2025
  • 21 views

Google Cloud Platform エンジニア向け教科書:実践から認定まで : 第4章:課金と料金モデル、予算とアラート:GCPの「お財布」管理術

  • 投稿者 mh
  • 6月 3, 2025
  • 24 views