1. 程式人生 > >android定時任務為什麼不用Timer

android定時任務為什麼不用Timer

看完這篇文章,我突然明白,今年假期做的專案存在很大的問題!

在做定時任務的時候,有的同學可能能會用到Timer這個定時任務的輔助類,
但是使用它會有潛在的風險,風險如下,
(1)時間計算不準確問題
    因為Timer是以絕對時間計算定時任務的,會受到系統時間的影響,如果在任務執行期間,更改了系統時間,那麼會
導致時間計算不準確問題,導致任務沒用按找預定的時間執行。
(2)只能單任務執行
    簡單講就是,只能一次執行一個任務,如果前一個任務沒有執行完成,後一個任務是無法並行執行的,只能等待前一個任務執行完成
才能執行。也有可能會出現這樣的結果,前一個任務執行的時間太長,後幾個任務時間短,可能在一個時間段內執行了多個任務,任務又


沒有按照我們要執行的時間執行。
(3)非檢查異常導致非同步任務終止
    Timer當在執行的過程中遇到非檢查異常的時候,會導致本次任務失敗,並且接下來的任務也無法被執行,Timer將會終止執行,這不是
我們要的結果,我們需要一套恢復機制。

Java5以後可以用下面的這個類來替代Time,並且解決了以上三個問題
  java.util.concurrent.ScheduledThreadPoolExecutor

那麼在Android上呢,可以用 java.util.concurrent.ScheduledThreadPoolExecutor,或者用Handler機制做,
但是不建議使用Timer