Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 相机冻结(安卓)_Java_Android_Android Camera - Fatal编程技术网

Java 相机冻结(安卓)

Java 相机冻结(安卓),java,android,android-camera,Java,Android,Android Camera,我正在尝试制作使用摄像头的应用程序。我分班上课 摄像机表面(延伸表面视图) ViewElement(扩展视图) MainActivity(扩展ViewElement) 第二个活动(扩展ViewElement) 我在清单中声明为活动的类,仅限于MainActivity和SecondActivity。首先,当应用程序运行时,它将执行显示CameraSurface的MainActivity(ViewElement中有CameraSurface类的实例,该实例添加到ViewElement类中的Conte

我正在尝试制作使用摄像头的应用程序。我分班上课

  • 摄像机表面(延伸表面视图)
  • ViewElement(扩展视图)
  • MainActivity(扩展ViewElement)
  • 第二个活动(扩展ViewElement)
  • 我在清单中声明为活动的类,仅限于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相同(只有Different按钮,但仍使用camera),问题是当应用程序执行SecondActivity时,camera变为冻结。我还是不知道为什么会这样。在CameraSurface类中,如果摄影机实例不等于null,则该类具有用于释放摄影机的零件。有人知道我的申请结果吗

    有关更多信息,我在logcat上获得:

    01-14 16:38:23.899:D/memalloc(12581):/dev/pmem:Unmapping buffer base:0x506f0000大小:1843200偏移量:1228800

    01-14 16:38:23.899:D/memalloc(12581):/dev/pmem:Unmapping buffer base:0x509b2000 size:614400 offset:0

    01-14 16:38:23.899:D/memalloc(12581):/dev/pmem:Unmapping buffer base:0x50ca4000 size:1228800 offset:614400

    01-14 16:38:24.389:D/memalloc(12581):/dev/pmem:Unmapping buffer base:0x50dd0000 size:4829184 offset:4804608


    我可以想到两个原因: 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,对吗?我不确定相机冻结的原因。这两个是我给出的可能的解决方案(可能对你有用)。是的,使用rununuimThread with runnable启动run()方法中的第二个活动我使用了你的两个建议,并在2台设备上试用,第一台设备我遇到了同样的问题,相机冻结。第二个设备我得到了黑色背景。好的,只是为了调试,您可以直接启动第二个活动(将其作为主活动)以查看您的第二个活动是否成功创建摄影机曲面。我将第二个活动设置为在运行应用程序时首先执行,以确保成功创建摄影机曲面。