以倒计时为例子,刚开始我以为只要在按钮关联的函数里面每延时一秒就修改一下控件就行了,但是当我把他安装到模拟器运行的时候才发现事情没有那么简单。
当我在模拟器启动程序,点击按钮时,程序崩溃了,所以这样写是不行的。
这时我们需要用到安卓的 Handler 消息处理机制来解决线程不能修改控件的这个问题
package com.example.ymy;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.TextView;
public class MainActivity extends Activity {
Handler H;
TextView textview;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//绑定控件
textview = (TextView) findViewById(R.id.view);
//建立Handler
H = new Handler(){
//消息处理
public void handleMessage(Message msg) {
super.handleMessage(msg);
//修改控件
textview.setText(msg.what+"s");
}
};
}
public void StartTime(View v){
new Thread(new Runnable() {
public void run() {
for(int i=10;i>=0;i--){
Message msg = new Message();
msg.what = i;
H.sendMessage(msg); //发送启动信号,启动Ui线程的Message
try {
//延时1s
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}).start();
}
}