【问题标题】:Android - Resuming Camera Activity gets delayedAndroid - 恢复相机活动被延迟
【发布时间】:2017-07-05 04:30:28
【问题描述】:

我正在研究相机模块,这里唯一的问题是当我尝试重新拍摄相机时,它会延迟几秒钟,然后再次打开相机预览(参见第一张图片)。请看看我的相机预览如下所示

这是我拍完照片后

当我单击重拍按钮(中间)时,需要一些时间来重新加载相机预览(第一张图像)。我尝试了另一个应用程序,发现当它重新拍摄照片时,它会立即(无延迟)进入上一个相机预览,就像回到上一页一样。

在相机预览中,我实现了一些画布绘制来创建覆盖视图。但我认为这不是问题,因为我之前所说的另一个应用程序也需要一些时间来加载相机预览。 但是,唯一不同的是当他们重新拍摄照片时,相机预览会立即加载,而我的应用需要一些时间来重新加载相机预览。

我在课堂上实现了SurfaceHolder.Callback。我尝试删除 onResume 并调整一些方法,但没有太大帮助。

知道如何处理这种延迟吗?

谢谢

【问题讨论】:

  • 看我的回答希望这会给你一些提示。
  • 感谢@AndyDeveloper,我检查一下

标签: java android performance camera android-camera


【解决方案1】:

您需要创建另一个显示您的拍摄照片预览的活动。您的预览活动 XML 布局看起来与您的捕获活动相同,两种 XML 布局之间的唯一区别是您用于预览活动的 ImageView。

现在,该怎么做?这是简单的解决方案。正如您所提到的,您使用了 SurfaceHolder.Callback,因此您必须使用方法 Camera.PictureCallback 将您的照片保存到您的存储目录。

Camera.PictureCallback mPicture = new Camera.PictureCallback()
{
    @Override
    public void onPictureTaken(byte[] data, Camera camera)
    {
      // Logic to Save your Photo to your storage directory.
      Intent intent = new Intent(YouActivity.this, PreviewActivity.class);
      // Pass the saved image path to preview activity.
      intent.putExtra("ImagePath", youSavedImagePath);
      startActivity(intent);
    }
};

现在,在 PreviewActivity 上,只需从 Intent 获取值。

String imagePath = getIntent().getStringExtra("ImagePath");

获取图片路径后,将图片设置为你的imageView。

Bitmap bitmap = BitmapFactory.decodeFile(imagePath);
yourImageView.setImageBitmap(bitmap);

现在,当您按回 CaptureActivity 或单击重新拍摄时,您的预览将立即显示,而不是花费时间。请确保您没有完成 CaptureActivity。

【讨论】:

  • 谢谢,成功后我会更新结果并标记为已回答
  • @Webster 当然可以。欢迎先生:)
  • 无论如何,我已经实现了与你类似的方式,当 onPictureTaken 时,我将去第二个 Activity 加载已拍摄的图像。您能否详细说明它会使重拍功能更快的部分?谢谢老兄
  • 这恐怕不能解决问题。延迟是由于重启相机造成的,活动分离只会让情况变得更糟。
【解决方案2】:

为了更快地重新拍摄,您可以在照片到达时立即在后台重新启动相机预览,并在顶部显示(捕获的)图像视图,隐藏实时相机视频流。如果用户决定重新拍摄照片,您只需隐藏叠加层(可以是片段,或者只是带有 ImageView 和按钮的布局),实时预览将立即可用!

【讨论】:

  • 无论如何,如果我使用 Activity 打开图像(我使用 Picasso 将图像加载到 ImageView 中)而不是使用 Fragment 有什么区别吗?
  • 只要将两个“场景”都保留在一个 Activity 中,就可以更轻松地跟踪相机的生命周期。通常,我们使用SurfaceView回调来编排Camera.open()、Camera.release()、startPreview()等。用一个次要的activity来处理这个不是不可能的,但是通常分离的好处明显小于好处的有机相机持久性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多