gpt4 book ai didi

退出时Android有时会崩溃

转载 作者:行者123 更新时间:2023-12-03 17:41:18 26 4
gpt4 key购买 nike

我发现我的问题在互联网上已经报告了很多次,但我没有找到任何正确的解释。

在我的 Galaxy Note 上,当我退出我的程序时,我有一段时间在 le logcat 中显示这种消息。

threadid=3: reacting to signal 3
Wrote stack traces to '/data/anr/traces.txt'

我无法访问该文件。 DDMS View 在资源管理器中没有显示任何内容。

我在互联网上读到 ANR(应用程序无响应)是由于 Activity 长过程造成的。
但就我而言,我的 Activity 并没有做任何特殊的事情。

我正在使用启动 3 个线程的 SurfaceView。
其中一个在应用程序开始时可能需要很长时间(1 或 2 秒)(它从 sdcard 读取大数据文件),但是当我退出时它最后什么都不做。

我可以在 DDMS View 中看到 10 个进程,但我不知道 #3 是什么线程!
所以我不知道这是否是我启动的线程之一,或者这是否是 Android 线程。

除了找到问题之外,我还想了解什么是信号 3。
当这个问题之王发生时。仅仅是因为某个进程没有响应还是由于另一个问题?
我在 linux (beagleboard) 下测试了我的 native 代码。没有内存泄漏,也没有段错误。
为什么这个问题只在我退出我的应用程序时发生(并且只是有时)。这是否意味着我的线程破坏不正确?

我正在使用此代码
public void surfaceDestroyed(SurfaceHolder holder) {
boolean retry = true;
while (retry) {
try {
thread.join();
retry = false;
} catch (InterruptedException e) {
// try again shutting down the thread
}
}
}

我的 Activity 的 onDestroy 中还有一个特殊代码。

此代码使一些 native 代码免费。
因为它是 c++ 代码,所以它调用了我的对象的所有析构函数。
我不知道这种破坏是否很长,但我想它不能超过 1 毫秒。

好。我已经在这个问题上工作了 1 周。
如果我不理解问题,下一步对我来说将是重新启动一个新项目并导入我的代码,部分地检查问题何时真正发生。

最佳答案

好。我开始了一个新项目,我找到了一些信息!
线程#3 可能是垃圾收集器线程。
当 GC 对我在 native 代码中制作的 malloc 执行某些操作时,似乎是在退出时出现了问题。

我更改了所有代码,并在 Activity 的 OnCreate 中创建了一个大的 C++ malloc (20Mo)。并免费进入 OnDestroy。
退出并重新启动后,我遇到了问题。
我不知道 CG 和原生 C malloc 之间的联系是什么,但我猜想在一些启动之后 malloc 失败了,因为 GC 进程没有足够的时间来清理原生缓冲区......

实际上没有崩溃。
有时应用程序需要几秒钟才能启动,但手机不会崩溃。

这可能是我没有在每个地方测试我的 malloc 调用的结果,所以我的问题可能来自失败的 malloc。我会再次检查。

关于退出时Android有时会崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8487478/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com