在打开相机意图时,我遇到了奇怪的手机冻结/崩溃/灰色相机屏幕。我无法定期重现此错误,但是我的一个测试设备(华为Ascend P6 )每天都会发生几次,但是没有确定的步骤导致崩溃。
同样在极少数情况下,在我的应用程序意图中在此设备上制作照片会导致手机重新启动。在使用相机意图的其他应用程序中,此行为不是问题,所以我认为我的代码有问题。
我打开相机意图的代码:
public void openCameraForPhoto(OpenCameraForPhotoEvent event) {
photoUri = null;
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
File photoFile = null;
try {
photoFile = createImageFile();
} catch (IOException ex) {
showErrorToastAndFinish(errorMessage);
}
if (photoFile != null) {
photoUri = Uri.fromFile(photoFile);
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT,
photoUri);
startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
}
}
}
我认为有几个嫌疑人可能会导致这种不可预测的行为。
首先,我使用 TextureView 在我启动相机意图的屏幕上显示相机预览。虽然我在onPause方法中执行camera.release(),但我认为偶尔也不会调用它。
辅助,我使用另一个 TextureView 在同一屏幕上显示一些视频。由于我使用 MediaPlayer 来做这件事,也许它与相机冲突,导致它行为怪异? MediaPlayer 是否与相机启动有关?也许在背景中有来自画廊的图片或类似的东西?
第三次,我做的最不可疑的事情:从新创建的活动中打开相机意图。我真的不认为这是这种行为的原因,但也许设备无法处理CPU或内存峰值。
所以,问题是:我该怎么做才能防止这种行为,这不会被任何错误或异常所表示,但会使应用使用情况不理想?