簡體   English   中英

Android 工作線程

[英]Android worker thread

我想在 android 中創建一個在后面運行的線程。 線程通過while循環不斷檢查時間,如果匹配,它會做一些事情。 這一切都很好。 但是該應用程序沒有響應,就好像我根本沒有運行線程一樣。 while 仍然阻止一切。 我不明白為什么。

線程代碼:

public class AlarmThread implements Runnable {

LocalTime beginTime;
LocalTime endTime;

public AlarmThread(LocalTime beginTime, LocalTime endTime) {
    this.beginTime = beginTime;
    this.endTime = endTime;
}

@Override
public void run() {
     while(true){
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        currentTime = java.time.LocalTime.now();
        if(currentTime.isAfter(beginTime) && currentTime.isBefore(endTime)){
            sendNotification();
         }
      }
}

活動:

public void onButtonClickerDatepicker(View v) throws IOException {
    LocalTime beginTime = java.time.LocalTime.of(binding.simpleTimePicker.getHour(), binding.simpleTimePicker.getMinute());
    LocalTime endTime = java.time.LocalTime.of(binding.simpleTimePicker2.getHour(), binding.simpleTimePicker2.getMinute());
    alarmThread = new AlarmThread(beginTime, endTime);
    alarmThread.run();

}

調用Thread.start()以啟動Thread.run()的線程。 更重要的是,您的 AlarmThread 不是線程,而是 Runnable。 因此,您可以通過以下代碼啟動它:

private Thread workerThread = new Thread(new AlarmThread(start, end))
...
...
workerThread.start()

我建議您使用HandlerThread以獲得靈活性

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM