【问题标题】:Activity Idle Timeout for ActivityRecordActivityRecord 的活动空闲超时
【发布时间】:2012-07-12 03:26:55
【问题描述】:

所以我有一个奇怪的问题,我不完全确定我应该提供哪些信息,但我会尽力而为 - 如果我需要添加更多信息,请告诉我。我有一个问题,当我完成我的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 线程,如果这是正在发生的事情?

EDIT:好的,刚刚尝试注释掉除了 super.onCreate() 和 setContentView() 之外的 所有内容 - 问题仍然存在。它不会发生在除此之外的任何其他活动中,但没有 NOTHING TO 这一个。 :/

【问题讨论】:

  • 从技术上讲,可以使用SharedPreferences 阻止 UI 线程,但我想这可能不像网络访问或其他东西那样可能。您是否尝试过以某种方式删除它?
  • @AlexLockwood 感谢您的想法。刚试过;删除了对任何 SharedPreferences 的所有引用,注释掉了我的 onPause() 和 onResume(),但没有区别。
  • kcoppock 也看到我的问题stackoverflow.com/questions/30053090/…

标签: android performance android-activity android-activityrecord


【解决方案1】:

天哪。在反复试验之外很难诊断的事情之一,但我已经弄清楚了。作为参考,如果其他人有这个问题,它归结为我布局中的自定义视图。我添加了一个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);
    }
}

考虑到我的second highest rated answer on StackOverflow 专门处理这个问题,这个解决方案非常具有讽刺意味。 :P

叹息

【讨论】:

【解决方案2】:

我今天遇到了同样的问题,但后来发现原因和解决方案不同,我决定在此处添加信息,以防万一它可能对其他人有所帮助。
在我的情况下,问题是因为我的 onActivityResult() 方法中有以下行:
android.os.Debug.waitForDebugger();
我刚刚删除了该行,问题就消失了。 该行通常用于将调试器与操作系统线程同步,但我只是认为它不应该在任何地方使用。奇怪的是,直到我将手机与桌面断开连接后,问题才会出现。

问候

【讨论】:

    猜你喜欢
    • 2011-05-16
    • 1970-01-01
    • 2012-10-28
    • 1970-01-01
    • 2011-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多