簡體   English   中英

ActivityRecord的活動空閑超時

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM