2010-08-11 37 views
0

我不知道,但我的應用程序有時完全停滯(沒有響應觸摸屏幕)我認爲我遵循線程的所有規則,但我的應用程序顯然是放緩下Sprint EVO!我從來沒有像我自己一樣使用一個應用程序。我沒有得到ANR對話框,但我想我應該得到一個。我不知道如何讓這個應用程序像我曾經使用的其他應用程序一樣運行 - 不會凍結。是否有一個HttpClient並不是一個好主意,併爲所有想要使用它的活動保留一個靜態引用?我以前每次都會創建一個新的,並且認爲將它改爲一個可以加快速度。我的AsyncTasks都沒有結束。如果我首次進入活動A - > B - > C - > D,它將會平穩。我可以按回去,但當我回到A時,它會完全凍結,不會對任何事情做出反應。那個時候我拍了截圖。我真的不知道我做錯了什麼。我應該手動殺掉Activity.onPause()上的AsyncTasks嗎?大量無休止的異步任務引起的超級慢應用程序

回答

0

我不確定您的活動是否凍結......它讓我覺得您的AsyncTask的onPreExecuteonPostExecute()陷入無限循環,但是誰知道。

但是,我知道如果您要在多個線程之間共享您的HttpClient,您應該使用ThreadSafeClientConnManager

// Create the client. We can cache and reuse this client because we're using a 
    // ThreadSafeClientConnManager, which will create a pool of connections for us 
    // to use across multiple threads. 
    HttpParams params = new BasicHttpParams(); 
    HttpConnectionParams.setSoTimeout(params, TIMEOUT); 
    HttpConnectionParams.setConnectionTimeout(params, TIMEOUT); 
    SchemeRegistry schemeRegistry = new SchemeRegistry(); 
    schemeRegistry.register(
      new Scheme("http", PlainSocketFactory.getSocketFactory(), 80)); 
    ClientConnectionManager cm = new ThreadSafeClientConnManager(params, schemeRegistry); 
    httpClient = new DefaultHttpClient(cm, params); 
+0

我一直在使用ThreadSafeClientConnManager,但是我沒有設置超時。處理超時操作的最佳方式是什麼? – 2010-08-11 18:51:06

+0

我會建議設置這些超時參數。這樣,如果你點擊超時,那麼HttpClient將返回一個408錯誤代碼(客戶端超時代碼)的正確'HttpResponse'。 – 2010-08-11 19:03:23

+0

我試過了,但是之前它引起了更多的問題,雖然欣賞了努力,並且我相信它在某些情況下很有用。 – 2010-08-13 17:32:10