Android中handler倒數計時

qq1347291890發表於2019-02-12

import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import java.util.Timer;
import java.util.TimerTask;

public class **Activity extends BaseActivity{
private int time;
private Timer mTimer;

// 使用handler實現子執行緒傳送訊息到主執行緒
@SuppressLint("HandlerLeak")
private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
time = (int)msg.obj;
if (time<5){
timerTask();
}else {
Intent intent = new Intent(FlashScreenActivity.this,MainActivity.class);
startActivity(intent);
mTimer.cancel();// 停止倒數計時
finish();// 用於閃屏頁時關閉此activity,在使用者按返回按鈕時,不會再回到此頁面
}
}
};
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
  timerTask();// 呼叫計時器方法
}
private void timerTask() {
mTimer = new Timer();
TimerTask mTask = new TimerTask() {
@Override
public void run() {
time++;
Message message = new Message();
message.obj = time;
handler.sendMessage(message);
}
};
// 第一個引數"new MyTask(event.getServletContext())": 是 TimerTask 類,在包:import java.util.TimerTask .
// 使用者要繼承該類,並實現 public void run() 方法,因為 TimerTask 類實現了 Runnable 介面。
// 第二個引數"0"的意思是:(0就表示無延遲)
// 制定timer定時器第一次呼叫run方法的時間,0表示不指時間,立刻呼叫。一般這個引數指定的時間格式是:yyyy-MM-dd HH:mm:ss
mTimer.schedule(mTask,1000);
}
/**
* 防止記憶體洩漏(如果不停止,倒數計時會在程式內一直執行,知道程式消失)
* 銷燬時釋放資源
*/
@Override
protected void onDestroy() {
super.onDestroy();
mTimer.cancel();
finish();
}
}

相關文章