別スレッドから画面を制御するhandlerの使い方

別スレッドから画面(layout)を制御するにはhandlerを使用します。

制御したい画面を持つアクティビティに、handerの宣言をします。
宣言したhandlerはsendMessageメソッドで呼び出します。

データはMessageオブジェクトを利用してやりとりします。

下記はひたすら1秒毎にカウントし、TextViewにその秒数を表示するだけのサンプルです。
ストップボタンもついていません :x001:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package com.test.handlertest;
 
import java.util.Timer;
import java.util.TimerTask;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.TextView;
 
public class HandlerTestActivity extends Activity {
    /** Called when the activity is first created. */
 
    private Timer timer=null;
    private int counter = 0;
     
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
         
        timer = new Timer();
        timer.schedule(task,1000,1000);
    }
     
    private TimerTask task = new TimerTask() {
         
        @Override
        public void run() {
            counter += 1;
            handler.sendMessage(Message.obtain(handler,0,counter));
        }
    };
    private Handler handler = new Handler(){
        public void handleMessage(Message msg){
            TextView tv = (TextView)findViewById(R.id.textview1);
            tv.setText((String.valueOf(msg.obj)));
        }
    };
}
タイトルとURLをコピーしました