相机冻结(Android)



我正在尝试制作使用相机的应用程序。我分成几个班。

  1. CameraSurface(扩展SurfaceView)
  2. ViewElement(扩展视图)
  3. MainActivity(扩展ViewElement)
  4. SecondActivity(扩展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相同(只是有不同的按钮,但仍然使用相机),问题是当应用程序执行SecondActivity时,相机会冻结。我仍然不知道为什么会发生这种事。在CameraSurface类中,如果相机instense不等于null,则该类具有用于释放相机的部分。有人知道我的申请发生了什么吗?

关于更多信息,我在logcat上得到了这个:

01-14 16:38:23.8899: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) 您正在两个活动上调用相机表面,请在启动第二个活动之前尝试释放相机。2) 由于您使用的是SurfaceView for Camera,因此该操作尝试在OpenGL线程上运行。试试这个

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

最新更新