从哪里开始调试,当你得到“活动没有响应,强制关闭,等待”?

时间:2011-01-23 08:36:11

标签: java android drag-and-drop thread-safety

我参与了一个简单的应用程序。它的应用程序包括不同的级别,可以通过在画布中放置一些组件,将它们拖动到正确的位置等来解决。

该应用程序工作正常,但在我的HTC Desire 2.2上尝试时,我有时会收到警告消息:

抱歉: 活动xxxxx未重新编码。 强制关闭 - 等待

如果我按下等待按钮并让它持续几秒钟(有时最多约30秒),那么它会毫无问题地运行。我不知道应该从哪里开始调试代码,因为它偶尔会发生一次。

我已经在谷歌开发者网站上阅读了这些内容,而且这些内容大部分都是非常普遍的,并没有真正帮助。

任何想法?

因为,我自己无法调试问题,我将发布应用程序最重要的部分。请检查并告诉我如果我需要发布更多课程。

//Evrything else
Bitmap bitmap;
GraphicObject.Coordinates coords;
for (GraphicObject graphic : _graphics) {
    bitmap = graphic.getGraphic();
    coords = graphic.getCoordinates();
    canvas.drawBitmap(bitmap, coords.getX(), coords.getY(), null);
}
// draw current graphic at last...
if (_currentGraphic != null) {
    bitmap = _currentGraphic.getGraphic();
    coords = _currentGraphic.getCoordinates();
    canvas.drawBitmap(bitmap, coords.getX(), coords.getY(), null);
}

4 个答案:

答案 0 :(得分:4)

Android内置了一个相对较好的Profiler支持。 当您知道此ADNR将显示的位置时(例如,在您的活动的一种方法中,您可以将该块放在跟踪块中:

Debug.startMethodTracing("xyz");
<your code goes here>
Debug.stopMethodTracing()

这将在激活时将跟踪文件写入/sdcard/xyz.trace

您可以稍后(在发生此类ADNR之后)通过

获取它
adb pull /sdcard/xyz.trace

并通过

进行分析
traceview xyz.trace

在traceview屏幕中,您可以看到方法及其调用方法,然后您可以查看时间。 请参阅http://developer.android.com/guide/developing/tools/adb.htmlhttp://developer.android.com/guide/developing/tools/traceview.html

答案 1 :(得分:0)

你在主线程上进行网络连接吗?或Time.sleep()的。或者是长时间运行的计算?

你应用程序主线程中的某些内容需要超过5秒(或者是10?)秒才能完成。

答案 2 :(得分:0)

我认为你在主线程上创建30秒睡眠,如果是这样,应用程序将在30秒内无响应,并且android系统将显示强制关闭对话框将在5秒后显示。尝试在新线程上创建30秒暂停和操作。检查android开发人员站点以获取有关线程的更多信息。

如果您不知道从哪里开始调试,请检查您的logcat日志并搜索错误或警告。检查一下 - &gt; http://www.droidnova.com/debugging-in-android-using-eclipse,541.html了解有关logcat的一些信息。

希望有所帮助。祝你好运。

编辑:然后我认为您应该将等待按钮执行的功能放在新线程中,以便应用程序立即响应并且子线程保持无响应,这无关紧要。

再次编辑:哦,我现在明白了,对不起有误,所以你不确定问题出在哪里,尝试搜索任何网络连接,在代码中暂停/暂停。哦,并将您的手机连接到您的计算机,按F5运行应用程序,并尝试在强制关闭框打开时搜索logcat中的警告或错误。并尝试复制logcat日志并将其发送给我,并检查错误是什么。

答案 3 :(得分:0)

您可以使用新的StrictMode来检测导致UI线程挂起的原因。 看看this link

它仅适用于GingerBread(API级别9),因此您只需在模拟器上测试它,执行必要的清理,然后删除StrictMode代码