关于
我有一个 android 应用程序,它有 2 个 Activity 。 Activity A 产生 Activity B, Activity B 访问另一个模块中的房间数据库。我使用 Koin 进行所有依赖项注入(inject),并使用 rxandroid(用于观察的 Schedulers.io() 和用于观察的 UI 线程)观察数据库事务
问题
当我访问数据库时,操作成功完成,数据库中添加了一个条目,然后 1-2 秒后 Activity 崩溃,应用程序返回到 Activity A,应用程序中没有堆栈跟踪或任何错误消息日志猫。
我正在 AVD Pixel 2 API 28 中测试应用
如果我从 logcat 中删除所有过滤器,我会发现这个错误:
2021-01-14 22:31:01.836 9799-9799/com.example.myapp I/System.out: Saving Course
2021-01-14 22:31:01.928 9799-9799/com.example.myapp I/System.out: Added course to DB: 11
2021-01-14 22:31:02.822 9799-9835/com.example.myapp I/om.example.myap: Explicit concurrent copying GC freed 94987(4MB) AllocSpace objects, 0(0B) LOS objects, 49% free, 3MB/6MB, paused 329us total 10.624ms
2021-01-14 22:31:03.439 1935-2006/? W/InputDispatcher: channel '7a68875 com.example.myapp/com.example.myapp.activities.CourseCreatorActivity (server)' ~ Consumer closed input channel or an error occurred. events=0x9
2021-01-14 22:31:03.439 1935-2006/? E/InputDispatcher: channel '7a68875 com.example.myapp/com.example.myapp.activities.CourseCreatorActivity (server)' ~ Channel is unrecoverably broken and will be disposed!
2021-01-14 22:31:03.441 1935-2006/? W/InputDispatcher: channel '1c99176 com.example.myapp/com.example.myapp.activities.MainActivity (server)' ~ Consumer closed input channel or an error occurred. events=0x9
2021-01-14 22:31:03.441 1935-2006/? E/InputDispatcher: channel '1c99176 com.example.myapp/com.example.myapp.activities.MainActivity (server)' ~ Channel is unrecoverably broken and will be disposed!
2021-01-14 22:31:03.443 1773-1773/? I/Zygote: Process 9799 exited due to signal (11)
信号 11 显然是段错误..
我尝试过的
- 仅创建房间实体而不将其插入数据库仍然会导致崩溃
- 删除 Activity A 并在 Activity B(访问数据库)上启动应用程序似乎不会产生错误(我尝试了几十次)
- 使用调试器单步执行保存功能。我可以中断主线程或 IO 线程,在这两种情况下,尽管线程处于中断状态,应用程序仍会崩溃。
- 将 rxandroid 替换为 kotlin 协程。在此之后崩溃仍然发生
- 我已尝试在我的手机(像素 3a)上调试应用程序,但到目前为止无法重现崩溃。不过会继续努力。
- 我在 API 30 的 Pixel 3a AVD 上试过这个,但无法重现崩溃。然后我在 API 28 上尝试了 Pixel 3a AVD,崩溃就在那里。所以目前它似乎只发生在 API 28 中......
- 已使用 API 27 和 API 29 进行测试,均运行良好。删除 API 28 SDK 并重新下载它,删除所有相关的 AVD 并重新创建它们,仍然收到信号 11 崩溃,就像第二次尝试全新安装 API 28 一样。所以段错误似乎只发生在 Android Pie 上
- 我开始创建我在这里使用的相同总体架构和逻辑的简化版本,以努力查明错误的确切来源。我不太热衷于重新开始简化的项目,因为不知道是什么导致了这个错误,我很可能最终会再次遇到它。
注意:有时我会进行更改,它会“修复”问题,只是为了它会在一段时间后重新出现,这使得使用传统方法很难调试
结论
我真正需要的是一些调试方法。我不知道是什么原因造成的,也不知道如何继续调试它。
最佳答案
我更改为不同的 android API 级别,此后问题没有再出现
关于android - Mysterious Signal 11 在访问 Room 数据库时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65727721/