2014-01-14 67 views
1

我尝试使用相机的应用程序。我分成了一些班级。相机冻结(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类中,如果摄像机实例不等于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

回答

0

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

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

我还是不确定我从你的答案中得到了什么。所以,第一次我必须在开始第二次活动之前释放相机。此代码'新处理程序()之前,这意味着postDelayed(新的Runnable() { 公共无效的run(){ MainActivity.this.startActivity(新意图(MainActivity.this,SecondActivity.class));} } ,5000L);' 并使用你的代码来改变我的代码来调用secondActivity吧? –

+0

我不确定相机冻结的原因。这两个是我给出的可能解决方案(可能适用于您)。 是的使用runOnUIMThread与runnable启动你的第二个活动内run()方法 – ppuskar

+0

我使用你的两个建议,并尝试在2设备,第一个设备我有同样的问题,相机冻结。第二个设备我有黑色的背景。 –