2014-01-14 135 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設備,第一個設備我有同樣的問題,相機凍結。第二個設備我有黑色的背景。 –