最終更新:2017-03-17 (金) 12:31:07 (2594d)  

Android/非同期処理
Top / Android / 非同期処理

Android/スレッド

android.os.Looper

  • メインスレッドは内部的にandroid.os.Looperを持っており、その中にはMessage Queueが含まれる
  • 無限にループしながら自分が属したスレッドのMessage Queueに入ってきたMessageやRunnableオブジェクトを順に取り出してこれを処理するHandlerに伝える

android.os.Handler

  • HandlerはLooperから受けたMessageを実行、処理したり、他のスレッドからメッセージを受けてMessage Queueに入れる役割
  • 処理の実行
    • Handler.handleMessage?
  • キューイング
  •     Handler handler = new Handler();
        handler.post(new Runnable() {
            @Override
            public void run() {
                System.out.println(Thread.currentThread().getName());
            }
        });

android.os.Message

  • スレッド間通信する内容を盛り込むオブジェクト

android.os.HandlerThread

  • 一般的なスレッド(java.lang.Thread)を拡張したクラスで、内部に繰り返しループするLooperを持っている
  • コンストラクタ
  •     // 別スレッド生成 -> 開始
        HandlerThread handlerThread = new HandlerThread("other");
        handlerThread.start();
    
        Handler handler = new Handler(handlerThread.getLooper());
        handler.post(new Runnable() {
            @Override
            public void run() {
                System.out.println(Thread.currentThread().getName());
            }
        });

android.os.AsyncTask

  • AsyncTaskを使用してスケジューリングできるタスク数には制限があり、数秒程度の短いタスクでのみ理想的に動作するという限界がある

Java/スレッド

  • 新しい実行のスレッドを作成するには 2 通りの方法がある

java.lang.Threadクラスの継承

  • class HogeThread extends Thread {void run(){...}}
    HogeThread t = new HogeThread();
    t.start();

java.lang.Runnableインターフェイスの実装

  • class HogeRun implements Runnable {void run(){...}}
    HogeRun r = new HogeRun();
    new Thread(r).start();

クラスとか

用途別

短い

長い

関連

参考

関連