[英]Activity Idle Timeout for ActivityRecord
所以我有一個奇怪的問題,我不完全確定我應該提供的所有信息,但我會盡我所能 - 如果我需要添加更多信息,請告訴我。 我遇到了一個問題,當我完成我的Activity
並返回上一個Activity
(或者使用新的Intent
啟動它 - 問題似乎集中在完成Activity
)時,UI性能急劇下降大約六或七秒,然后恢復正常。
從LogCat
,此警告始終顯示:
07-11 22:09:42.594: W/ActivityManager(292): Launch timeout has expired, giving up wake lock!
07-11 22:09:42.601: W/ActivityManager(292): Activity idle timeout for ActivityRecord{42bf6e00 com.kcoppock.sudokubeta/com.kcoppock.sudoku.SudokuBoardActivity}
一旦活動超時,UI性能就會恢復正常。 在那之前,它非常緩慢。 我沒有可以阻止主線程的代碼,我甚至已經注釋掉了我的整個onPause()
方法,看它是否有任何區別,但事實並非如此。
Activity
不會產生任何后台線程,也不會執行任何網絡活動,它唯一的磁盤訪問是對SharedPreferences
訪問。 我之前能夠找到的問題是關於HistoryRecord
空閑超時,而不是ActivityRecord
。
任何想法會導致什么? 或者我如何確定阻止UI線程的內容,如果發生了什么?
編輯 :好的,只是嘗試注釋掉除super.onCreate()和setContentView()之外的所有內容 - 問題仍然存在。 它不與任何其他活動,但這個發生,但沒有什么這一個。 :/
哦,geez。 在試驗和錯誤之外很難診斷的其中一件事,但我已經弄明白了。 作為參考,如果其他人有這個問題,它歸結為我的布局中的自定義視圖。 我在布局傳遞后添加了一個ViewTreeObserver.OnGlobalLayoutListener()
來做一些布局修改,但是在那個監聽器中我修改了布局,從而導致了另一個布局,實質上是創建了一個無限循環(但不知何故不會導致ANR)。 我的解決方案是這樣的:
private class BoardLayoutListener implements OnGlobalLayoutListener {
@Override
public void onGlobalLayout() {
//...do stuff here
//REMOVE this listener so that you don't repeat this forever
ViewTreeObserver obs = SudokuBoard.this.getViewTreeObserver();
obs.removeGlobalOnLayoutListener(this);
}
}
這個解決方案非常具有諷刺意味,考慮到我在StackOverflow上的第二高評價答案專門處理這個問題。 :P
嘆
我今天遇到了同樣的問題,但事實證明我有不同的原因和解決方案,我決定在這里添加信息以防萬一它可以幫助別人。
在我的情況下問題是由於我的onActivityResult()
方法中有以下行引起的:
android.os.Debug.waitForDebugger();
我剛剛刪除了該行,問題就消失了。 這一行通常用於將調試器與OS線程同步,但我認為不應該在任何地方使用它。 奇怪的是,直到我將手機與桌面斷開連接才會出現問題。
問候
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.