Android模拟器上的调试错误:黑屏

时间:2014-01-23 11:07:41

标签: android eclipse debugging emulation

我在尝试调试下一个代码时发现了一个问题:

package course.examples.theanswer;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class TheAnswer extends Activity {

public static final int[] answers = { 42, -10, 0, 100, 1000 };
public static final int answer = 42;

@Override
protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);

      setContentView(R.layout.answer_layout);

      TextView answerView = (TextView) findViewById(R.id.answer_view);

          int val = findAnswer();
      String output = (val == answer) ? "42" : "We may never know";
      answerView.setText("The answer to life, the universe and everything is:\n\n"
                    + output);
}

private int findAnswer() {
    for (int val : answers) {
        if (val == answer)
            return val;
    }
    return -1;
}

}

我在行"int val = findAnswer();"中插入了一个断点,也就是说,在应用程序执行消息之前插入了一个断点(“生命的答案......”)。因此,模拟器显示带有标题的白色屏幕,它是正确的,但是当它通过大约10秒时,屏幕变黑......并且logCat显示下一条消息:

01-23 05:57:29.995: I/System.out(2009): waiting for debugger to settle...
01-23 05:57:30.205: I/System.out(2009): debugger has settled (1309)
01-23 05:57:30.845: D/dalvikvm(2009): threadid=1: still suspended after undo (sc=1 dc=1)
01-23 05:57:37.825: W/ActivityManager(1254): Launch timeout has expired, giving up wake lock!
01-23 05:57:37.835: E/WindowManager(1254): Starting window AppWindowToken{b33e2a00 token=Token{b3344b58 ActivityRecord{b317b130 u0 course.examples.theanswer/.TheAnswer t10}}} timed out

最后一条消息是屏幕变黑时。我无法发布图像,但模拟器只显示:小时,网络和电池。此外,如果我按下“resumen”按钮,该应用程序会很好。但是,我认为这不是主意。应该停止白屏以继续调试...(我想,但我不确定)。这是正常的吗?

有人可以帮我吗?

谢谢

1 个答案:

答案 0 :(得分:6)

解释很简单,但我不知道如何改变这种行为:

当Android应用程序运行时,主线程应该处理所有传入的消息(来自GUI和其他内部消息)。严格禁止使用主线程进行持久操作,因为在那段时间线程被阻塞,无法处理消息。

启动应用时,Android会给应用启动10秒钟。之后,它希望应用程序能够处理消息。

现在问题:

您已在onCreate(..)中设置了一个断点,该断点由主线程调用 - 一个不应被阻塞的线程。设置断点是在按下恢复之前中断/阻塞线程的任何其他内容。 因此,10秒后Android系统(不受调试器影响)希望应用程序完成启动。但是主线仍然被突破点困住了!因此,Android认为应用程序无法启动并停止某些部分负责GUI。

我看到的唯一解决方案是禁用此“启动超时” - 但是我不知道这是否可行或是如何实现的。