我参与了一个简单的应用程序。它的应用程序包括不同的级别,可以通过在画布中放置一些组件,将它们拖动到正确的位置等来解决。
该应用程序工作正常,但在我的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);
}
答案 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.html和http://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代码