下面是使用Handler实现定时器和倒计时器的攻略:
一、基本原理
在Android中,我们可以使用Handler和TimerTask分别实现定时器和倒计时器功能。其中,Handler是Android中非常常用的线程通信工具,TimerTask则是Java中的一个计时器任务。
实现过程大体分为以下几步:
- 定义一个Handler对象或自定义Handler类;
- 在Handler中实现定时或倒计时的操作;
- 在主线程中创建Handler实例,并使用Handler.postDelayed()方法或Timer.schedule()方法启动定时或倒计时任务;
- 在Activity生命周期方法中及时释放资源。
二、使用Handler实现定时器
下面是使用Handler实现定时器的方法:
public class TimerHandlerActivity extends AppCompatActivity {
private TextView mTextView;
private static final int MSG_UPDATE_TIME = 1;
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case MSG_UPDATE_TIME:
updateTime();
sendEmptyMessageDelayed(MSG_UPDATE_TIME, 1000);
break;
default:
break;
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_timer_handler);
mTextView = findViewById(R.id.text_view);
mHandler.sendEmptyMessage(MSG_UPDATE_TIME);
}
@Override
protected void onDestroy() {
super.onDestroy();
mHandler.removeCallbacksAndMessages(null);
}
private void updateTime() {
long now = System.currentTimeMillis();
String timeStr = DateUtils.formatDateTime(this, now, DateUtils.FORMAT_SHOW_TIME);
mTextView.setText(timeStr);
}
}
在上述代码中,我们定义了一个TextView和一个Handler对象。在Handler中,使用了sendEmptyMessageDelayed()方法实现了定时器功能。该方法发送一个空消息,并延迟1000ms后再次发送一个同样的消息,从而实现了每1秒钟更新一次时间的效果。
在Activity的onCreate()方法中,我们初始化了TextView和Handler,并通过Handler.sendEmptyMessage()方法发送了第一条消息,从而启动了定时器。
而在Activity的onDestroy()方法中,我们通过Handler.removeCallbacksAndMessages()方法及时释放了Handler对象的资源。
三、使用Handler实现倒计时器
下面是使用Handler实现倒计时器的方法:
public class CountDownHandlerActivity extends AppCompatActivity {
private TextView mTextView;
private static final int MSG_UPDATE_TIME = 1;
private static final int TOTAL_TIME = 60;
private int mCount = TOTAL_TIME;
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case MSG_UPDATE_TIME:
updateCountDownTime();
if (mCount > 0) {
sendEmptyMessageDelayed(MSG_UPDATE_TIME, 1000);
}
break;
default:
break;
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_count_down_handler);
mTextView = findViewById(R.id.text_view);
mHandler.sendEmptyMessage(MSG_UPDATE_TIME);
}
@Override
protected void onDestroy() {
super.onDestroy();
mHandler.removeCallbacksAndMessages(null);
}
private void updateCountDownTime() {
mCount--;
String timeStr = mCount + " s";
mTextView.setText(timeStr);
}
}
在上述代码中,我们同样定义了一个TextView和一个Handler对象。在Handler中,使用了sendEmptyMessageDelayed()方法实现了倒计时器的功能。该方法同样发送一个空消息,并延迟1000ms后再次发送一个同样的消息,从而实现了每1秒钟更新一次倒计时的效果。同时,我们在updateCountDownTime()方法中更新了倒计时的时间,并在mCount大于0时再次发送延时消息,从而实现了倒计时的效果。
在Activity的onCreate()方法和onDestroy()方法中,我们同样初始化了TextView和Handler,并及时释放了Handler对象的资源。
以上就是使用Handler实现定时器和倒计时器的方法,希望对你有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Android使用Handler实现定时器与倒计时器功能 - Python技术站