2012-07-20 13 views
2

在我的测试设备之一,我在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} 

我最初的研究表明,这是一种常见眉毛提升:

  1. “该应用程序可能有exceeded the VM budget并且内存不足。”
  2. “This can be ignored。”
  3. Network problem
  4. 活动是taking to long to start(在UI线程上处理过多)
  5. 服务&广播涉及HTTP
  6. 和和...

我的问题是:

  1. 有什么的影响 “启动超时已过期”?系统做什么? (例如,一个消息来源声称它会杀死我的应用程序,但实际上我看到我的应用程序在1-2分钟的冷冻后正常进行)
  2. 是否有这种警告的方式在我的应用程序中得到通知?
+1

我有这种情况发生时,我创建了一个无意的无限布局传递循环。您正在导航的“活动”中是否有任何布局或绘制(OnGlobalLayout,OnPreDraw等)侦听器? – kcoppock 2012-07-20 14:47:00

+0

@ kcoppock其实我没有任何你提到过的,但是我确实尝试为http://www.google.com提供'HttpURLConnection.getResponseCode()',并且它在** 6分钟后超时36秒!**启动超时发生得更早,所以我希望能够用它来帮助处理这种不寻常的情况。 – 2012-07-20 15:07:08

+1

你可以发布你如何尝试连接?我肯定会确保它在一个单独的线程上(使用AsyncTask)。 – kcoppock 2012-07-20 15:10:54

回答

2

这里是什么,我会尝试一般想法,但你怎么处理的AsyncTask取决于你的状态后,你在做什么。我会这样做:

private class GetHttpStatus extends AsyncTask<String, Void, Boolean> { 
    @Override 
    protected Boolean doInBackground(String[] params) { 
     private boolean status; 

     //this will be the string you pass in execute() 
     String urlString = params[0]; 

     HttpURLConnection httpConnection; 
     try { 
      URL gurl = new URL(urlString); 
      URLConnection connection = gurl.openConnection(); 
      connection.setConnectTimeout(5 * 1000); 
      httpConnection = (HttpURLConnection) connection; 
      int responseCode = httpConnection.getResponseCode(); 
      if(responseCode == HttpURLConnection.HTTP_OK) { 
       status = true; 
      } 
     } catch (Exception e) { 
      status = false; 
     } finally { 
      if(httpConnection != null) httpConnection.disconnect(); 
     } 
     return status; 
    } 

    @Override 
    protected Void onPostExecute(Boolean result) { 
     //Here you'll do whatever you need to do once the connection 
     //status has been established 
     MyActivity.notifyHttpStatus(result); 
    } 
} 

//in your Activity somewhere, you would call... 

new GetHttpStatus.execute("http://www.amazon.com"); 
+0

谢谢+1。如果没有人提供通知或听众发起警告,我也会接受。 – 2012-07-20 16:17:48

相关问题