本文,介紹常用定時器實現方式:
1)Handler+Sleep方式
2)Handler+PostDelayed方式
3)Handler+Timer方式
Handler的主要作用就是用來處理接收到的信息,用Handler消息傳遞機制是爲了多個線程 併發 更新U的同時,保證線程安全
1)Handler+Sleep方式
1.1)Handler+Sleep定義
public class HandlerAndSleep { public HandlerAndSleep() { } //定義Handler對象,用於處理接收Message Handler handler = new Handler(Looper.getMainLooper()){ @Override public void handleMessage(@NonNull Message msg){ super.handleMessage(msg); Log.d("HandlerAndSleep","HandlerAndSleep,時間:"+ ToolHelper.GetNowDate()); } }; //新建一個實現Runnable接口的線程類 class MyThread implements Runnable{ @Override public void run() { while (true){ try { Thread.sleep(1000); Message message = new Message(); message.what = 1; handler.sendMessage(message); } catch (InterruptedException e) { e.printStackTrace(); } } } } //開啓 public void Start(){ new Thread(new MyThread()).start(); } //關閉(存在問題,無法使用) public void Stop(){ new Thread(new MyThread()).stop(); } }
1.2)Handler+Sleep調用
public class TestActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_test);
//HandlerAndSleep實現定時器調用 HandlerAndSleep handlerAndSleep = new HandlerAndSleep(); handlerAndSleep.Start(); } }
1.3)Handler+Sleep結果
2)Handler+PostDelayed方式
2.1)Handler+PostDelayed定義
public class HandlerAndPostDelayed { public HandlerAndPostDelayed(){ } //定義Handler對象,用於處理接收Message Handler handler = new Handler(){ @Override public boolean sendMessageAtTime(@NonNull Message msg,long uptimeMillis){ Log.d("HandlerAndPostDelayed","HandlerAndPostDelayed,時間:"+ ToolHelper.GetNowDate()); return super.sendMessageAtTime(msg,uptimeMillis); } }; Runnable runnable = new Runnable() { @Override public void run() { handler.postDelayed(this,1000); } }; //開啓定時器 public void Start(){ handler.postDelayed(runnable,1000); } //關閉定時器 public void Stop(){ handler.removeCallbacks(runnable); } }
2.2)Handler+PostDelayed調用
public class TestActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_test); //HandlerAndPostDelayed實現定時器調用 HandlerAndPostDelayed handlerAndPostDelayed = new HandlerAndPostDelayed(); handlerAndPostDelayed.Start();
}
}
2.3)Handler+PostDelayed結果
3)Handler+Timer方式
3.1)Handler+Timer定義
public class HandlerAndTimer { public HandlerAndTimer(){
} private final Timer timer = new Timer(); Handler handler = new Handler(){ @Override public void handleMessage(@NonNull Message msg){ Log.d("HandlerAndTimer","HandlerAndTimer,時間:"+ ToolHelper.GetNowDate()); super.handleMessage(msg); } }; TimerTask timerTask = new TimerTask() { @Override public void run() { Message message = new Message(); message.what = 1; handler.sendMessage(message); } }; public void Start(){ timer.schedule(timerTask,0,1000); } public void Stop(){ timer.cancel(); } }
3.2)Handler+Timer調用
public class TestActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_test); //HandlerAndTimer實現定時器調用 HandlerAndTimer handlerAndTimer = new HandlerAndTimer(); handlerAndTimer.Start(); } }
3.3)Handler+Timer結果
附加下獲取當前時間方法
public class ToolHelper { public static String GetNowDate(){ //獲取當前時間 Date date = new Date(System.currentTimeMillis()); //日期格式 SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); return dateFormat.format(date); } }
參考來源:https://blog.csdn.net/Twan1234/article/details/125050488