【问题标题】:Camera Freeze (Android)相机冻结 (Android)
【发布时间】:2014-01-14 08:10:19
【问题描述】:

我正在尝试制作使用相机的应用程序。我分到某个班级。

  1. CameraSurface(扩展 SurfaceView)
  2. ViewElement(扩展视图)
  3. MainActivity(扩展 ViewElement)
  4. SecondActivity(扩展 ViewElement)

我在清单中声明为活动的类只是 MainActivity 和 SecondActivity。首先,当应用程序运行时,它会执行 MainActivity,它会显示 CameraSurface,(ViewElement 中有 CameraSurface 类的实例,它添加到 ViewElement 类的 ContentView 中)。 在 MainActivity 中有一个按钮将移动到 MainActivity 到 SecondActivity。我使用此代码:

new Handler().postDelayed(new Runnable()
    {
      public void run()
      {
        MainActivity.this.startActivity(new Intent(MainActivity.this, SecondActivity.class));
      }
    }
    , 5000L);

SecondActivity 与 MainActivity 相同(只是有不同的按钮,但仍然使用相机),问题是当应用程序执行 SecondActivity 时相机会冻结。我仍然不知道为什么会这样。如果相机实例不等于 null,则在 CameraSurface 类中有用于释放相机的部分。有人知道我的申请会发生什么吗?

有关其他信息,我在 logcat 上得到了这个:

01-14 16:38:23.899: D/memalloc(12581): /dev/pmem: 取消映射缓冲区基数:0x506f0000 大小:1843200 偏移量:1228800

01-14 16:38:23.899: D/memalloc(12581): /dev/pmem: 取消映射缓冲区基数:0x509b2000 大小:614400 偏移量:0

01-14 16:38:23.899: D/memalloc(12581): /dev/pmem: 取消映射缓冲区基数:0x50ca4000 大小:1228800 偏移量:614400

01-14 16:38:24.389: D/memalloc(12581): /dev/pmem: 取消映射缓冲区基数:0x50dd0000 大小:4829184 偏移量:4804608

【问题讨论】:

    标签: java android android-camera


    【解决方案1】:

    我能想到两个原因: 1)您在两个活动上都调用相机表面,尝试在启动第二个活动之前释放相机。 2) 由于您使用的是 SurfaceView for Camera,因此该操作正在尝试在 OpenGL 线程上运行。 试试这个

    runOnUiThread(new Runnable(){
        public void run() {
        //make call to your second activity
        }
        }
    

    【讨论】:

    • 我仍然不确定我从你的回答中得到了什么。所以,首先我必须在启动第二个活动之前释放相机。这意味着在此代码之前new Handler().postDelayed(new Runnable() { public void run() { MainActivity.this.startActivity(new Intent(MainActivity.this, SecondActivity.class)); } } , 5000L); 并使用您提供的代码更改我的代码以调用 secondActivity 对吗?
    • 我不确定相机冻结的原因。这两个是我给出的可能的解决方案(这可能对你有用)。是的,使用带有 runnable 的 runOnUIMThread 在 run() 方法中启动您的第二个活动
    • 我同时使用了您的建议并在 2 台设备上尝试,第 1 台设备我遇到了同样的问题,相机冻结。第二台设备我有黑色背景。
    • 好吧,只是为了调试,你能不能直接启动你的第二个活动(使其成为主要活动),看看你的第二个活动是否成功创建相机表面。
    • 我将 secondActivity 设置为在运行应用程序时首先执行,它成功创建了相机表面。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-27
    • 1970-01-01
    相关资源
    最近更新 更多