2014-03-04 70 views
0

我相信我可能會用錯誤的方法攻擊這個問題,或者我沒有正確編碼它。我接到很多電話要求更新。有時我會在幾小時內得到更新檢查。這個函數是我的更新函數,它會每隔一段時間檢查一次更新,除非沒有互聯網和延遲,並再次嘗試四個小時。我不知道我是否延遲使用這個權利?無論是否發現更新,我都需要更新功能來檢查和重新檢查每24小時。它必須每24小時嘗試一次,除非它在24小時內沒有互聯網,並且應該在4小時內再試。我正確地做這件事嗎?Android延遲檢查更新遞歸

private final Runnable mUpdateUI = new Runnable() 
    { 
     public void run() 
     { 
      if (isNetworkAvailable()== true) 
      { 
       try 
        { 
         new checkupdate().execute(); 
         mHandler.postDelayed(mUpdateUI, 86400000); 
         Toast.makeText(MainActivity.this, "Daily update check!", Toast.LENGTH_LONG).show(); 
        } 
       catch (IOException e) 
        { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } 
      } 
      else 
       { 
        mHandler.postDelayed(mUpdateUI, 21600000); 
        Toast.makeText(MainActivity.this, "No internet for Daily update check, try again in little!", Toast.LENGTH_LONG).show(); 
       } 

     } 

    } 

;

回答

0

試試這個:

private Handler mHandler; 
private int delayTime; 
private final Runnable mUpdateUi = new Runnable(){ 
    @Override 
    public void run(){ 
     check(); 
    } 

}; 

private void start(){ 
    new Thread(
     new Runnable(){ 
      @Override 
      public void run(){ 
       Looper.prepare(); 
       mHandler = new Handler(); 
       check(); 
       Looper.loop(); 
      } 
     } 
    ).run(); 
} 


private void check(){ 
    if (isNetworkAvailable()== true){ 
     try { 
      new checkupdate().execute(); 
      delayTime = 86400000; 
      Toast.makeText(MainActivity.this, "Daily update check!", Toast.LENGTH_LONG).show(); 
     } 
     catch (IOException e) { 
      e.printStackTrace(); 
      delayTime = 21600000; 
     } 
    }else{ 
     delayTime = 21600000; 
     Toast.makeText(MainActivity.this, "No internet for Daily update check, try again in little!", Toast.LENGTH_LONG).show(); 
    } 
    reCheck() 
} 

private void reCheck(){ 
    mHandler.postDelayed(mUpdateUI, delayTime); 
} 

如果你不希望這個在後臺運行,只跳過新的Thread()的一部分。這樣你所需要做的就是調用start()一次,然後瞧!

+0

如果我現在正在使用onCreate函數中的原始代碼調用此代碼,那會是問題嗎?不會每次我從簡歷或關閉的程序,它會調用更新功能,現在我將兩個或三個...等更新功能運行後臺。理想情況下,每24小時檢查一次。那麼我在哪裏調用這個呢?或者我需要一些趕上來檢查它是否已經運行? – MAXGEN

+0

我以前使用這個命令從onCreate調用這個。 mHandler.post(mUpdateUI);那麼用start()來代替?我正在考慮將這些代碼移到另一個類中,這是否會成爲問題? – MAXGEN

+0

我的Looper出現錯誤,它表示它一次只能運行一次活頁夾。我無法啓動應用程序或它不會「膨脹主要活動。我正在運行另一個處理程序併爲另一個功能運行。我該怎麼辦?我以前沒有這個問題。 – MAXGEN