android中是不允许从线程中直接控制UI的, 但可以通过message跨过这个限制 下面是网上找到的一个例子
public class chapter8_4 extends Activity {
private String TAG = "chapter8_3";
private Button btnEnd;
private TextView labelTimer;
private Thread clockThread;
private boolean isRunning = true;
private Handler handler;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btnEnd = (Button) findViewById(R.id.btnEnd);
btnEnd.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
isRunning = false;
}
});
handler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 0:
labelTimer.setText("逝去了 " + msg.obj + " 秒");
}
}
};
labelTimer = (TextView) findViewById(R.id.labelTimer);
clockThread = new Thread(new Runnable() {
@Override
public void run() {
int timer = 0;
while (isRunning) {
try {
Thread.currentThread().sleep(1000);
timer++;
/* labelTimer.setText("逝去了 " + timer + " 秒"); */
Message msg = new Message();
msg.obj = timer;
msg.what = 0;
handler.sendMessage(msg);
Log.d(TAG, "lost time " + timer);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
});
clockThread.start();
}