2017-08-12 96 views
0

所以我有一個問題,如果它是一個愚蠢的我前面道歉,我試圖搜索它,但不知道要準確搜索什麼。我試圖運行一個延遲的任務,但只有當我的int = 0,這會正常工作,就像我想要它?Android處理程序/定時器請求

public static void runTask(String p) 
{ 
    Handler handler = new Handler(); 
     handler.postDelayed(new Runnable() { 
      @Override 
      public void run() 
      { 
       pendingRequest = pendingRequest - 1; 
       if (pendingRequest == 0) 
       { 
         context.startActivity(p); 
       } 
      } 
     }, 4000); 
    } 

} 

我想要什麼就做,如果pendingRequest是0只運行,但我有添加到()的runTask後掛起的請求被稱爲等活動。如果這沒有任何意義,請讓我知道,我會嘗試對其進行修改。

+0

它看起來可能會工作,您是否遇到過某種錯誤? – natario

+0

它不工作是事,我只是將它實現到我的代碼中,它從不啓動活動。我不知道它是否寫完了,因爲有多個地方我可以運行任務,有時是背靠背的,所以我問爲什麼這樣做可以達到目的,即使它被稱爲多次一旦pendingRequest命中爲零,它就會做它所需要的。 – Jayce

回答

0

這是一種晦澀的方式來做事情,所以只看到這個片段,我不能確切地告訴所需的行爲是什麼,但是,如果您最終使參數「p」,它應該工作。我也不熟悉一個接受字符串而不是意圖的startActivity方法,但我不知道「context」實際上是一個Android Context對象,但我假設它是。 我不確定的是爲什麼你會等待4秒,然後遞減pendingRequest。我會認爲你想減少,讓別人添加一個待處理的請求4秒,如果它仍然是0等待開始後活動......但是,我再也不能告訴從片段。

+0

你對我想要做的事情有正確的認識,基本上只要有pendingRequest進來,我就不想運行代碼,除非4秒後沒有任何更多的任務。我想我不明白它如何說,當我有3個活動,在兩秒鐘內調用'runTask'。它是否仍然等待第一個請求4秒鐘,或者每次調用「runTask」時它會重置? – Jayce

0

試試這個:

private static Object requestLock = new Object(); 
public static void runTask(final String p) 
{ 
    synchronized(requestLock) 
    { 
     if (--pendingRequest > 0) // Decrement first 
     { 
      // There are more requests 
      return; 
     } 
    } 

    // Wait 4 sec and if there are still no requests start the activity. 
    Handler handler = new Handler(); 
     handler.postDelayed(new Runnable() { 
      @Override 
      public void run() 
      { 
       synchronized(requestLock) 
       { 
        if (pendingRequest == 0) 
        { 
         context.startActivity(p); 
        } 
       } 
      } 
     }, 4000); 
    } 
} 

注意:您還需要添加在您遞增pendingRequests一個synchronized塊。

+0

它不在用戶界面上,它都是從後臺活動完成的,所以我很好奇它是否會在每次調用任務時覆蓋它。 – Jayce

+0

嗯,好的,你可以打電話給「新的處理程序(Looper.getMainLooper())」,因爲你需要在UI上運行它。但是,不,如果有人叫它,任務不會被取消;然而,因爲你正在做一個==它應該沒問題,因爲如果你已經到達了startActivity代碼,那麼值就是-1或者更少,然後是其他人叫做runTask。 – Ackerbar