平凡エンジニアからの出発

一に努力、二に理想、三に積小為大。

【AndroidTraining】Thread 1

Lesson

Thread 1

Mission

下記の仕様を満たすアプリを作りましょう。

  • 別スレッドからTextViewの更新をする

Snap Shot

※count up していく f:id:atuyan39:20210414014506p:plain

Step by Step

  1. 新規にTrainingThreadActivity.javaを追加する
  2. TextView(別スレッドから更新する)、Button(別スレッドを開始する)を追加する
  3. Buttonにクリックリスナーを追加する
  4. 別スレッドを新規に作成する
  new Thread(() -> {
    // 時間のかかる処理等を記載する
  }).start();

5 . メインスレッド(UIスレッド)へ通知を行うために、Handlerを作成します。
その際に、getMainLooperを使い、メインスレッドのLooperを取得し、Handlerの引数として渡します。
このHadnlerに対して、post(Runnable r)メソッドを呼ぶことで、
メインスレッドのViewに操作することができるようになります。

  Handler handler = new Handler(getMainLooper());
  String text = "count:";
  for (int i = 0; ; i++) {
    try {
      String finalText = text + i;
      Thread.sleep(THREAD_SLEEP_TIME);
      handler.post(() -> mTextView.setText(finalText));
    } catch (InterruptedException e) {
      e.printStackTrace();
    }
  }

Code

Thread 1 · atuyan39/AndroidTraining@fa686c4 · GitHub

Reference

developer.android.com

Memo

ThreadやLooperやMessage、細かい機構までわかるように今後問題を作っていきたい。