【发布时间】:2012-07-20 14:20:52
【问题描述】:
在我的一个测试设备中,我在 LogCat 中收到了这个可怕的警告:
07-20 09:57:02.093: W/ActivityManager(1159): Launch timeout has expired, giving up wake lock!
07-20 09:57:02.218: W/ActivityManager(1159): Activity idle timeout for HistoryRecord{4072b5e8 com.rero.myapp/.MyActivity}
我的初步研究表明,这是一个常见的问题:
- “应用程序可能有 exceeded the VM budget 并且内存不足。”
- “这个can be ignored。”
- Network problem?
- Activity 为 taking to long to start(UI 线程处理过多?)
- 涉及HTTP 的服务和广播。
- 然后继续...
我的问题是:
- “启动超时已过期”的含义是什么?系统是做什么的? (例如,一个消息来源声称它会杀死我的应用程序,但实际上我看到我的应用程序在 1-2 分钟的感知冻结后正常进行)
- 是否有在我的应用程序中获得通知的方法关于此警告?
【问题讨论】:
-
我无意中创建了一个无限布局传递循环时发生了这种情况。 Activity 中是否有任何布局或绘制(OnGlobalLayout、OnPreDraw 等)侦听器离开?
-
@kcoppock 实际上我没有你提到的那些,但我确实尝试
HttpURLConnection.getResponseCode()为google.com 并且......它在 6 分 36 秒后超时! Launch 超时发生得更早,因此我希望将其用作处理这种异常情况的助手。 -
你能发布你是如何尝试连接的吗?我肯定会确保它在单独的线程上(使用 AsyncTask)。
-
@kcoppock HTTP 超时之谜是一个不同的主题,我刚刚发布了a question dedicated to it。我仍然对在我的应用程序中获得通知关于启动超时警告的方法感兴趣。
-
我赞成你的另一个问题。我不确定为什么会这样,但我确实认为这两者可能以某种方式相关。我不确定除了在日志中看到它之外,还有其他方法可以获取有关已记录警告的通知。