更新!
请见下文
情况
我们的应用程序出现了难以诊断的问题。当我们尝试使用意图让相机应用程序返回一张照片时,我们会收到一个低级别的崩溃情况,我们不确定如何进行调试。这在Nexus 5x设备上发生,在Android 6.0和Android 7.0上都有。
这是来自监视器的堆栈跟踪:
10-17 11:59:41.208 9925-9925/? A/DEBUG: *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
10-17 11:59:41.208 9925-9925/? A/DEBUG: Build fingerprint: 'google/bullhead/bullhead:7.0/NBD90W/3239497:user/release-keys'
10-17 11:59:41.208 9925-9925/? A/DEBUG: Revision: 'rev_1.0'
10-17 11:59:41.208 9925-9925/? A/DEBUG: ABI: 'arm64'
10-17 11:59:41.208 9925-9925/? A/DEBUG: pid: 5791, tid: 6054, name: RenderThread >>> com.ourapp <<<
10-17 11:59:41.209 9925-9925/? A/DEBUG: signal 6 (SIGABRT), code -6 (SI_TKILL), fault addr --------
10-17 11:59:41.230 9925-9925/? A/DEBUG: Abort message: 'Leaked 2 GPU objects!'
10-17 11:59:41.230 9925-9925/? A/DEBUG: x0 0000000000000000 x1 00000000000017a6 x2 0000000000000006 x3 0000000000000008
10-17 11:59:41.230 9925-9925/? A/DEBUG: x4 00006e6174736e69 x5 0000000000000000 x6 0000007629a9f000 x7 0000000000000000
10-17 11:59:41.230 9925-9925/? A/DEBUG: x8 0000000000000083 x9 ffffffffffffffdf x10 0000000000000000 x11 0000000000000001
10-17 11:59:41.230 9925-9925/? A/DEBUG: x12 0000000000000018 x13 0000000000000000 x14 0000000000000000 x15 000850a8eb6af8af
10-17 11:59:41.231 9925-9925/? A/DEBUG: x16 000000762948eed0 x17 0000007629438a2c x18 0000000000000400 x19 00000076093b84f8
10-17 11:59:41.231 9925-9925/? A/DEBUG: x20 0000000000000006 x21 00000076093b8450 x22 000000000000000b x23 000000762933c040
10-17 11:59:41.231 9925-9925/? A/DEBUG: x24 00000000ffffffff x25 00000075f9d71490 x26 7fffffffffffffff x27 00000075f2c54060
10-17 11:59:41.231 9925-9925/? A/DEBUG: x28 0000007625c83238 x29 00000076093b7ae0 x30 0000007629435e58
10-17 11:59:41.231 9925-9925/? A/DEBUG: sp 00000076093b7ac0 pc 0000007629438a34 pstate 0000000060000000
10-17 11:59:41.237 3715-9157/? E/mm-camera-sensor: port_sensor_handle_aec_update:443miss aec update window, skip
10-17 11:59:41.253 9925-9925/? A/DEBUG: backtrace:
10-17 11:59:41.254 9925-9925/? A/DEBUG: #00 pc 000000000006ba34 /system/lib64/libc.so (tgkill+8)
10-17 11:59:41.254 9925-9925/? A/DEBUG: #01 pc 0000000000068e54 /system/lib64/libc.so (pthread_kill+64)
10-17 11:59:41.254 9925-9925/? A/DEBUG: #02 pc 0000000000023ed8 /system/lib64/libc.so (raise+24)
10-17 11:59:41.254 9925-9925/? A/DEBUG: #03 pc 000000000001c790 /system/lib64/libc.so (abort+52)
10-17 11:59:41.254 9925-9925/? A/DEBUG: #04 pc 00000000000107f4 /system/lib64/libcutils.so (__android_log_assert+224)
10-17 11:59:41.254 9925-9925/? A/DEBUG: #05 pc 0000000000054cc0 /system/lib64/libhwui.so
10-17 11:59:41.254 9925-9925/? A/DEBUG: #06 pc 00000000000350f8 /system/lib64/libhwui.so
10-17 11:59:41.254 9925-9925/? A/DEBUG: #07 pc 00000000000328c8 /system/lib64/libhwui.so
10-17 11:59:41.254 9925-9925/? A/DEBUG: #08 pc 0000000000037348 /system/lib64/libhwui.so
10-17 11:59:41.254 9925-9925/? A/DEBUG: #09 pc 0000000000038434 /system/lib64/libhwui.so
10-17 11:59:41.254 9925-9925/? A/DEBUG: #10 pc 0000000000039890 /system/lib64/libhwui.so (_ZN7android10uirenderer12renderthread12RenderThread10threadLoopEv+152)
10-17 11:59:41.254 9925-9925/? A/DEBUG: #11 pc 0000000000012460 /system/lib64/libutils.so (_ZN7android6Thread11_threadLoopEPv+272)
10-17 11:59:41.254 9925-9925/? A/DEBUG: #12 pc 000000000009bc4c /system/lib64/libandroid_runtime.so (_ZN7android14AndroidRuntime15javaThreadShellEPv+116)
10-17 11:59:41.254 9925-9925/? A/DEBUG: #13 pc 000000000006863c /system/lib64/libc.so (_ZL15__pthread_startPv+208)
10-17 11:59:41.254 9925-9925/? A/DEBUG: #14 pc 000000000001d9fc /system/lib64/libc.so (__start_thread+16)
我们可以使用以下代码通过意图调用相机应用程序来检索图片时,可靠地触发此操作:Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (intent.resolveActivity(fragmentContext.getPackageManager()) == null) {
return;
}
try {
File photoFile = FileUtils.createImageFile(fragmentContext);
data.addFileUpload(photoFile.getAbsolutePath());
Uri photoUri = FileProvider.getUriForFile(fragmentContext, OurApplication.FILE_PROVIDER, photoFile);
intent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri);
startActivityForResult(intent, REQUEST_TAKE_PHOTO);
} catch (IOException ignored) {
}
如图所示,这里没有什么异常。
环境
我们可以在我们的测试设备上触发此问题,这些设备是Nexus 5x。一个设备运行Android 6,另一个设备运行Android 7。它们都会生成类似的堆栈跟踪(所示堆栈来自Android 7.0)。
触发上下文
看起来我们可以在以下两种情况之一下触发此事件:
- Google Maps已加载到启动相机的活动中
- 低内存情况(使用Chrome加载cnn.com的一个或两个标签页来触发)
我们尝试过的
我们已经尝试从应用程序中逐步删除功能,直到我们无法再触发此崩溃,但我们始终能够在低内存情况下触发它。
问题
- 有人遇到过这个问题并找到了解决方法吗?
- 有关如何进一步调试此问题的建议?
- 任何提示的链接?
更新
2016/11/02 - 有一个未决的错误报告,如评论中所述。不同的设备/版本(Nexus 5x、6P和Pixel,Android 6、7.0和7.1)也会报告各种不同类型的问题。我将继续发布更多信息更新。这种情况已被归类为小缺陷。我建议关注该错误并提出您的担忧。
2016/12/14 - 尽管应用了各种安全更新,但我个人仍然遇到此问题。除了其他人报告在各种设备上出现相同问题之外,没有更多信息。请查看链接的错误报告,在那里加星并发表评论。如果我找到任何有效方法,我会在此发布!
2017/07/31 - 对于仍然遇到此问题的人,一位用户尝试对其用户群进行分段推出,并删除各种功能以诊断问题。在他们的情况下,通过删除com.google.android.gms:play-services-maps:11.0.1
,他们的问题似乎已得到解决。不幸的是,地图是我们应用程序的核心组件;因此,这在我们的情况下是不可接受的。在我看来,这仍然涉及到在各种情况下消耗内存导致恢复活动时出现问题。
2017/12/05 - Google没有做任何更改或真正的认可。从我找到的情况来看,此问题似乎已在Android 8.0中得到解决,并且在某些运行Android 7.x的设备上也得到了解决。