刷新UI的两种实现方法
http://hi.baidu.com/fighter0425/blog/item/acb24612528406c3ac6e7558.html
因为最近一直在考虑在6410的板子上的android平台上实现温度实时测量并且可以报警的实现方法,去年开始学习android开发,但是却还不知道怎样刷新界面,将采集进来的数据不断地更新。今天上网查了一下,花了两个小时研究了一下,呵呵,终于搞明白该怎么做了。总的来说有两种方法,第一种采用定时器和消息通知的方式实现,第二种采用多线程机制主动去刷新界面。当然这两种方法都离不开android中强大的handler,UI线程的更新采用这种方法确实是个很少的选择。handler在这里就不多说了,网上资料很多,随时都可以查阅。
第一种方法实现:
package du.helloword;
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.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class HelloActivity extends Activity {
/** Called when the activity is first created. */
private final int UPDATE_DATA= 1;
private TextView mydata;
private Timer mTimer;
private TimerTask mTimerTask;
private Handler mHandler;
private int i=0;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mydata=(TextView)findViewById(R.id.MyData);
Button button1 = (Button)findViewById(R.id.start);
//button1.setOnClickListener(start);
mHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case UPDATE_DATA:
i=i+1;
if(i==100)
i=1;
//mydata.setText("");
Log.d("update--data","这是第"+i+"次打印此信息");
mydata.setText("这是第"+i+"次更新数据");
break;
default:
break;
}
}
};
mTimer = new Timer();
mTimerTask = new TimerTask() { //定时器定时处理的函数
@Override
public void run() {
// TODO Auto-generated method stub
mHandler.sendEmptyMessage(UPDATE_DATA);
}
};
mTimer.schedule(mTimerTask, 1000, 3000);
}
}
下面为AVD模拟的截图
第二种方法实现:
package du.activity;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.widget.TextView;
public class Activity01 extends Activity {
private TextView mydata;
private int i;
private Handler handler = new Handler();
private Runnable runnable = new Runnable() {
public void run() {
this.update();
handler.postDelayed(this, 1000 * 2);// 间隔2秒
}
void update() {
i=i+1;
if(i==100)
i=1;
mydata.setText("这是第"+i+"次更新数据");
}
};
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mydata = (TextView) findViewById(R.id.MyData);
mydata.setText("初始状态");
handler.postDelayed(runnable, 1000 * 2);
}
@Override
protected void onDestroy() {
handler.removeCallbacks(runnable); //停止刷新
super.onDestroy();
}
}
以下为截图:
发布到手机上的运行效果