2014-04-29 103 views
0

在應用程序中,我有一個活動,其啓動模式爲singleTask。通過此活動的用例數量很多,因此稱爲次數。在通過運行monkeyrunner腳本對應用程序進行壓力測試並每隔幾秒調用一次該活動導致ANR。開始singleTask活動每隔幾秒鐘給Android中的ANR

我想,它被設計成大多數用例通過此活動的方式並不正確,但我無法更改此設計。

是否有ANR的抑制?我的意思是,將UI操作添加到事件隊列中,以便它不會阻止主UI線程並且不會提供ANR。

回答

0

從問題中不清楚你的活動是(或者應該)做什麼。可能你需要一個服務來代替。

在後臺線程中執行耗時的操作並將結果傳遞給UI線程是很常見的。

您可以使用類Handler/Looper(它可以發送Runnable s而不是消息)或使用AsyncTaskAsyncTask是棘手的,這裏討論:Is AsyncTask really conceptually flawed or am I just missing something?。 AFAIK谷歌試圖修復這些典型的錯誤,並使新的行爲與舊行爲不兼容(即,我看到了一些新的Android上的一些錯誤行爲,這可能是由於假設某些版本的線程在執行任務後殺死了asynctask作業開始他們走出屏幕)。

我可以猜測,singleTask是你的方式來對抗一個活動,當屏幕變成一個新事物時,死亡的事實。我建議你使用單身人士(他們倖免於屏幕旋轉,但不能在重啓過程中倖存下來,還有一件事有時會在Android中發生)。 (用戶切換到像Camera這樣的應用程序,拍攝一張很大的照片,然後返回 - 由於Camera需要內存,因此活動重新啓動。在實踐中已經看到了這一點,但那次我沒有試圖確定整個過程是否是)

無論如何,請添加日誌記錄,告訴您何時進入和離開活動,包括onNewIntent()和其他生命週期功能(爲了安全起見,我建議也要打印線程名稱)。那麼你可能會看到發生了什麼。