別スレッドから画面(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))); } }; } |