2013-11-10 56 views
0

我開發了一個移動應用程序,其中點擊活動A中的按鈕觸發活動B以及異步任務。在Activity B中,有一個異步任務在oncreate方法中被激怒。所以,會有2個異步任務並行運行。異步任務都與服務器交互。 (分別爲POST和GET方法)Android - 兩個AsyncTask並行運行 - 異常

當服務器啓動並運行時,所有情況都很好。當我故意關閉服務器並單擊活動A中的按鈕時,我不確定控件的位置。我期待一個connectiontimeout異常,我正在接受它。但有時,Activity B異常中的異步任務首先發生,而有時Activity A異常中的異步任務首先發生。

在兩個異步方法catch塊,有這

例外(以兩者的異步方法)後,一旦開始anotheractivity(無服務器連接活動)意圖已發生,我沒有看到任何登錄Logcat。我相信這個應用程序會陷入癱瘓。我希望優雅地通知其他正在運行的異步任務來停止。

任何人都可以幫助我完成這項任務。有沒有什麼好的設計方法來處理這個問題?讓我知道並感謝您的時間和精力。

+0

我不確定我是否正確說明了我的問題。我在這裏要說的是,通過讀取活動A中的一個asynctask的狀態,如果活動A中的asynctask遇到連接超時異常,則活動B中的另一個asynctask應該停止執行。我是否需要引用活動B中活動A的異步任務實例?如果是,任何人都可以幫助我獲取代碼示例。謝謝你的幫助。 –

回答

0

考慮實現您自己的超時檢測和處理。
使用處理程序,並提供超時週期燒製的AsyncTask

private void readFromServer(String url, int timeout) { 
    // read from server 
    final ServerHit serverHit = new ServerHit(this);//ServerHit is my asyncTask 
    serverHit.execute(url); 
    // set a timeout 
    Handler handler = new Handler(); 
    handler.postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      if (serverHit.getStatus() == AsyncTask.Status.RUNNING) 
      { 
       serverHit.cancel(true); 
      } 
     } 
    }, timeout); 
    } 

時,但是,如果你調用每個的AsyncTask的只有一個實例,考慮其聲明爲靜態或讓它遵循Singleton模式。取消一個任務就取消另一個任務。

編輯

您可以定義那些asyncatasks靜態和可以取消他們超時

+0

謝謝。我將執行此操作並讓您知道結果 –

+0

這已實施。上面重申了我的問題 –

0

你應該閱讀的權利「是的AsyncTask真正概念上有缺陷的第一個「相關」的帖子還是我只是遺漏了什麼?」。

你試圖做你正在做的事情,對Android操作系統如何管理活動和他們的AsyncTasks沒有多少理解。嘗試從活動A啓動一個,然後在完成之前啓動活動B註定會失敗。