在某些情况下,主界面需要通过某种方式来实现当前页面UI的更改,如:发送验证码时,提示你还有多少秒可以重新发送。在这种情况下需要使用线程来实现,但是安卓机制中主程序不能进行耗时的任务,所以需要使用线程来实现。
例子:实现一个计时器,时间为100秒,倒计时至0; 方法:在点击按钮中添加一个进程,进程执行一次休眠一秒,执行后需要传递当前剩余的时间值,重写handle的handlemessage方法,在此方法中实现ui的更改。备注:(可以不使用内部类,下面为两种书写形式)
Button button;
TextView textview;
int count=100;
Handler hand;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button=(Button) findViewById(R.id.button);
textview=(TextView) findViewById(R.id.textview);
// hand=new Handler(){
// @Override
// public void handleMessage(Message msg) {
// // TODO Auto-generated method stub
// switch (msg.what) {
// case 1:
// textview.setText(msg.obj+"");
// //textview.setText("456");
// break;
//
// default:
// break;
// }
// }
// };
//注释的为一种方法,下面为另一种方法
hand=new Handler(){
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
switch (msg.what) {
case 1:
Bundle bu=msg.getData();
int i=bu.getInt("key");
textview.setText(i+"");
break;
default:
break;
}
}
};
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
new test1().start();
}
});
//下面方法可行!
// button.setOnClickListener(new OnClickListener() {
//
// @Override
// public void onClick(View arg0) {
// //new test().start();;
// new Thread(){
// @Override
// public void run() {
// // TODO Auto-generated method stub
// while(count>=0){
// Message message=hand.obtainMessage();
// message.what=1;
// message.obj=count;
// hand.sendMessage(message);
// count--;
// try {
// Thread.sleep(1000);
// } catch (InterruptedException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
// }
// //Looper.loop();
// }
// }.start();;
// }
// });
}
class test extends Thread{
@Override
public void run() {
// TODO Auto-generated method stub
while(count>=0){
Message message=hand.obtainMessage();
message.what=1;
message.obj=count;
hand.sendMessage(message);
count--;
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//Looper.loop();
}
}
class test1 extends Thread{
@Override
public void run() {
// TODO Auto-generated method stub
while(count>=0){
Message message=new Message();
message.what=1;
Bundle data=new Bundle();
data.putInt("key", count);
message.setData(data);;
hand.sendMessage(message);
count--;
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//Looper.loop();
}
}
}