2014-01-23 37 views
0

我有一個應用程序使用JSON定期(固定的時間間隔,20秒)從服務器請求數據。強制異步任務從主線程停止

我目前的實現包括在異步任務中有一個循環,並有20秒「睡眠」條件。然而,這看起來不太好。我的問題是有更好的實踐。還有一種強制停止其主線程的異步任務的好方法。

另一種方法是更改​​代碼,並讓客戶端發送一個請求,讓服務器有服務器循環的答案back.Which是一個更好的implmentation預先感謝您:)

protected String doInBackground(String... args) { 

      String RegistrartionID = RegisID(); 

      while (true){ 
       List<NameValuePair> params = new ArrayList<NameValuePair>(); 
       params.add(new BasicNameValuePair("Start_Term", args[0])); 
       params.add(new BasicNameValuePair("Dest_Term", args[1])); 
       params.add(new BasicNameValuePair("RegistrartionID", 
         RegistrartionID)); 
       Log.i("Start_Term", args[0]); 
       Log.i("Dest_Term", args[1]); 
       Log.i("RegistrartionID", RegistrartionID); 
       JSONObject json = jsonParser.makeHttpRequest(
         URL_SEND_CHOSEN_TERMINALS, "POST", params); 

       try { 
        Thread.sleep(20000); 
       } catch (InterruptedException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 

      } 

      return null; 
     } 
+0

你不能沒有休息,從內環路停止一段時間(true)循環。 – njzk2

回答

0

正如你所說,這不是一個好的實現。與流行的信念相反,AsyncTask不適用於長時間/未確定的過程,它適用於短期任務,因此可以在之後退出並結束。我想推薦使用Service。基本上,因爲你有優勢,你可以啓動它,並在你定義它的Activity中停止它。您可能會看到其文檔here。也可以幫助this,這是一個很好的例子。

+1

對不起,回覆後,你的方法與user3229580的警報管理器建議一起工作,非常感謝你:) – user2652614