別スレッドから画面(layout)を制御するにはhandlerを使用します。
制御したい画面を持つアクティビティに、handerの宣言をします。
宣言したhandlerはsendMessageメソッドで呼び出します。
データはMessageオブジェクトを利用してやりとりします。
下記はひたすら1秒毎にカウントし、TextViewにその秒数を表示するだけのサンプルです。
ストップボタンもついていません :x001:
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)));
}
};
}
