android更新UI(界面)的方法;android刷新界面数据的方法;android定时器更新界面;android显示当前时间
最近在学习Android更新UI的方式,下面是我学到的几种方法:
一、定时器更新UI的两种方法
1、使用Timer的方式
private Timer timer=new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
//在这里更新数据
}
},0,500); //延迟500毫秒后,执行一次task
有时为了优化代码,我们需要关闭定时器,这时只要调用timer.cancel()就可以结束任务,例如:
@Override
protected void onDestroy() {
super.onDestroy();
timer.cancel();//取消任务
}
还有,你可能对timer.schedule()方法里的几个参数不是很理解,这里我简单介绍一下:
timer.schedule(task, 0); // 此处delay为0表示没有延迟,立即执行一次task
timer.schedule(task, 1000); // 延迟1秒,执行一次task
timer.schedule(task, 0, 2000); // 立即执行一次task,然后每隔2秒执行一次task
2、使用Handler + Runnable的方式
//定时更新界面数据
private Handler handler = new Handler();
private Runnable runnable = new Runnable() {
public void run () {
handler.postDelayed(this,500); //每隔0.5秒刷新一次
//在这里更新数据
}
};
写完以上代码后,我们还需要调用handler.post()来启动定时器:
handler.post(runnable);//启动定时器
同样,如果你想要取消定时器,需要调用handler.removeCallbacks()方法:
@Override
protected void onDestroy() {
super.onDestroy();
handler.removeCallbacks(runnable);//取消定时器
}
以上就是我学习到定时器更新UI的两种办法,下面我们来看看这两种方法的效果。这里我使用显示当前时间的方式来举例。
第一种方法举例:
private TextView times;
private Timer timer=new Timer();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.first_activity);
times=(TextView) findViewById(R.id.tv_times);
updateTime();
}
@Override
protected void onDestroy() {
super.onDestroy();
timer.cancel();//取消任务
}
private void updateTime(){
//启动定时器
timer.schedule(new TimerTask() {
@Override
public void run() {
times.setText(CurrentTime());
}
},0,500); //延迟500毫秒后,执行一次task
}
//获取当前时间
private String CurrentTime(){
SimpleDateFormat dateFormat = new SimpleDateFormat("HH时mm分ss秒");
return "现在是1: "+dateFormat.format(new Date());
}
第一种方法的效果:
第二种方法举例:
private TextView times;
//定时更新界面数据
private Handler handler = new Handler();
private Runnable runnable = new Runnable() {
public void run () {
handler.postDelayed(this,500); //每隔0.5秒刷新一次
times.setText(CurrentTime());
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.second_activity);
times=(TextView) findViewById(R.id.tv_times2);
handler.post(runnable);//启动定时器
}
@Override
protected void onDestroy() {
super.onDestroy();
handler.removeCallbacks(runnable);//取消定时器
}
//获取当前时间
private String CurrentTime(){
SimpleDateFormat dateFormat = new SimpleDateFormat("HH时mm分ss秒");
return "现在是2: "+dateFormat.format(new Date());
}
第二种方法的效果:
两种方式的效果差不多,具体还要看应用。
以上就是我学习到的内容,写的不好的地方希望大家指出,谢谢!
参考1https://blog.csdn.net/xiaanming/article/details/9011193
参考2https://blog.csdn.net/chenzhengfeng/article/details/95071049