2011-08-22 152 views
0

我有一個AsynTask實現,當我從設備啓動應用程序時,應用程序有延遲。這種延遲在第一次運行時不會出現,但始終在第一次運行之後,所以如果我殺了應用程序並在6分鐘後回來,它將啓動連接並永遠不會結束。AsyncTask在啓動應用程序時出現奇怪的延遲

這裏是我的AsyncTask:

private class MakeConnection extends AsyncTask<String, Void, String> { 

    Context context; 
    ProgressDialog myDialog; 

    public MakeConnection(Context conetext) 
    { 
     this.context = conetext; 
     myDialog = new ProgressDialog(this.context); 
    } 

    @Override 
    protected String doInBackground(String... urls) { 
     String response = ""; 
     for(String url : urls) 
     { 
      try 
      { 
       URL theUrl = new URL(url); 
       URLConnection ucon = theUrl.openConnection(); 
       ucon.setRequestProperty("Content-Type", "application/json;charset=UTF-8"); 
       InputStream is = ucon.getInputStream(); 
       BufferedInputStream bis = new BufferedInputStream(is); 
       ByteArrayBuffer baf = new ByteArrayBuffer(50); 
       int current = 0; 
       while(((current = bis.read()) != -1) && !isCancelled()) 
       { 
        baf.append((byte)current); 
       } 
       response = new String(baf.toByteArray()); 

      } 
      catch (Exception e) 
      { 
       response = e.getMessage(); 
      } 

     } 
     return response; 
    } 

    @Override 
    protected void onPostExecute(String result) { 
     try { 
      myDialog.dismiss(); 
      success(result); 
     }catch(JSONException e) 
     { 
      data = e.toString(); 
     } 
    } 

    @Override 
    protected void onPreExecute(){ 
     myDialog = ProgressDialog.show(
       context, 
       "Please wait...", 
       "Loading the data", 
       true, 
       true, 
       new DialogInterface.OnCancelListener(){ 
        @Override 
        public void onCancel(DialogInterface dialog) { 
         MakeConnection.this.cancel(true); 
        } 
       } 
     ); 
    } 
} 

然後在我的onCreate()

task = new MakeConnection(this); 
task.execute(new String[] {url}); 

我無法理解爲什麼會發生?

編輯:

當應用程序啓動的第一次工作得很好,但是當我再次打開該應用程序在以後的階段上面看到的第一個連接執行以下操作:

  • 它啓動進度對話框,然後我不知道它是否實際連接,因爲我看到的是進度對話框永遠不會消失,換句話說,它永遠不會完成連接,因爲如果連接完成進度對話框將完成
+0

您可以重新解釋或解釋什麼是延遲或什麼連接沒有完成。您是否在「doInBackground」中放置了一些日誌代碼來查看它何時開始和結束? – Fraggle

+0

@Fraggle好吧我編輯帖子 – Armand

+0

好的,首先,你可以插入一些日誌代碼,看看實際發生了什麼。其次,我仍然不知道「當我在稍後的階段重新打開應用程序」的意思。 Activity是否調用了onDestroy方法? wasCreate實際上是第二次?您是否退出主屏幕然後重新啓動?嘗試在中間運行的應用程序上執行Force stop並查看是否得到不同的結果。 – Fraggle

回答

0

我發現問題在於服務器獲取請求,我做的是添加一個計時器刷新連接,如果花費很長時間。