2014-07-05 22 views
2

我的應用程序中現在有一個動畫加載器。Android:延遲函數執行並取消其執行的可能性

public void startLoader() { 
     Runnable task = new Runnable() { 
      @Override 
      public void run() { 
       lock = true; 
       loader.setVisibility(View.VISIBLE); 
      } 
     }; 
     runOnUiThread(task); 
    } 

    public void stopLoader() { 
     Runnable task = new Runnable() { 
      @Override 
      public void run() { 
       lock = false; 
       loader.setVisibility(View.GONE); 
      } 
     }; 
     runOnUiThread(task); 
    } 

現在,我希望它是這樣工作的:

stopLoader應該有像1000毫秒的延遲執行,所以自敗1秒stopLoader被調用後。 ,但是如果在1000ms內調用startLoader,則stopLoader計時器將被取消。

實現此目的的最佳方法是什麼?

回答

3

您應該使用Handler而不是runOnUiThread。
使用handler可以使用handler.removeCallbacks(runnable)取消任何延遲的任務。

Handler mHandler = new Handler(); 
Runnable startTask = new Runnable() { 
     @Override 
     public void run() { 
      lock = true; 
      loader.setVisibility(View.VISIBLE); 
     } 
    }; 
Runnable stopTask = new Runnable() { 
     @Override 
     public void run() { 
      lock = false; 
      loader.setVisibility(View.GONE); 
     } 
    }; 
public void startLoader() { 
    mHandler.removeCallbacks(stopTask); 
    mHandler.post(startTask); 
} 

public void stopLoader() { 
    mHandler.postDelayed(stopTask, 1000); 
} 

更多here

+0

謝謝!完美工作(在將mStopTask更改爲stopTask後) – pouwelsjochem

+0

錯字已修復 – Yoavst