相机冻结(Android)

时间:2014-01-14 08:10:20

标签: java android android-camera

我尝试制作使用相机的应用程序。我分到了一些班级。

  1. CameraSurface(扩展SurfaceView)
  2. ViewElement(扩展视图)
  3. MainActivity(扩展ViewElement)
  4. SecondActivity(扩展ViewElement)
  5. 我在清单中声明为MainActivity和SecondActivity的活动的类。首先,当应用程序运行时,它将执行将显示CameraSurface的MainActivity(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相机变得冻结时。我仍然不知道为什么会这样。在CameraSurface类中有一部分用于释放相机,如果相机实例不等于null。有谁知道我的申请会发生什么?

    有关其他信息,请在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

1 个答案:

答案 0 :(得分:0)

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

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