2012-11-09 58 views
1

我正在開發一個Android應用程序,該應用程序使用在線服務,我需要加載我的片段。基本上,我有一個菜單,每個按鈕替換下面的碎片。當我點擊一個按鈕時,片段開始被替換,如果我同時按下了鍵盤上的另一個按鈕,我得到「應用程序不響應」對話框,然後單擊「等待」,併成功加載我的片段。有沒有辦法阻止這種情況發生?由於Web服務,我的應用程序總是需要幾秒鐘才能加載。我在Google上讀到,我可以使用AsyncTask,並在DoOnBackground方法上完成加載。我不知道這是否有效,但我甚至無法嘗試,因爲它不會讓我改變視圖,它會拋出一個關於只有原始線程可以改變視圖的錯誤..我需要服務來完成加載我的視圖,所以我甚至不能用AsyncTask做這個服務。我現在已經沒有想法了!必須有辦法做到這一點..我欣賞建議!如何避免ANR對話框應用程序未響應

回答

11

有沒有辦法阻止這種情況發生?

是的:不要花太長的時間在主應用程序線程上。使用StrictMode來識別可能的罪魁禍首(磁盤I/O,網絡I/O),並使用Traceview找出你正在做的事情,可能需要很長時間。

由於Web服務的原因,我的應用程序總是需要幾秒鐘才能加載。

這應該在後臺線程中完成。

我讀谷歌,我可以使用的AsyncTask,並完成對DoOnBackground方法加載..我不知道是否可行,但我不能去嘗試,因爲它不會讓我改變看法有,它拋出一個錯誤大約只有原來的線程可以改變看法

這就是爲什麼你更新從onPostExecute()方法的意見,如the documentation for AsyncTask描述。

+0

好的,謝謝!我會嘗試 – ximena

+2

你應該接受這個答案! – 2012-11-09 14:53:56

+2

是的,我會盡快:),只要它讓我 – ximena

0

您必須對AsyncTask的onPostExecute()函數中的ui進行更改。

0

絕不要在主幹上下文中執行數據庫操作或內容提供者操作。遲早你會遇到應用程序不響應錯誤。 ANR不是一個好的做法。

相關問題