2012-01-09 16 views
3

私はカメラのフラッシュを使用して懐中電灯アプリで作業しています。正常に動作しているようですが、場合によってはcamera.release()を呼び出すと約1分ほどハングします。私は以下のコードを含んでいます。私はたくさんの例を見てきましたが、私はそのようなことを引き起こす可能性のあるものは見ません。何か案は?app hanging on camera.release()

//latest 
    public void setOn(boolean on, Context context) {  

    if (lock) { 
     Log.i(TAG, "lock: true"); 
     return; 
    } 


    if (on) {   
     if (mCamera == null) { 
      mCamera = Camera.open(); 
     } 

     Parameters params = mCamera.getParameters(); 
     params.setFlashMode(MODE_TORCH); 
     mCamera.setParameters(params); 
     mCamera.startPreview(); 
    } else { 
     if (mCamera != null) {    
      try {     
       Parameters params = mCamera.getParameters(); 
       params.setFlashMode(MODE_OFF); 
       mCamera.setParameters(params);     
      } finally { 
       new Thread(new Runnable() { 
        public void run() { 
         Log.i(TAG, "new Thread - start"); 
         lock = true; 
         mCamera.setPreviewCallback(null); 
         mCamera.stopPreview(); 
         mCamera.release(); 
         mCamera = null; 
         lock = false; 
         Log.i(TAG, "new Thread - end"); 
        } 
       }).start();          
      } 
     } 
    } 
} 


//original 
public void setOn(boolean on, Context context) {   
    Camera camera = mCamera; 
    if (on) {   
     if (camera == null) { 
      mCamera = camera = Camera.open(); 
     } 

     Parameters params = camera.getParameters(); 
     params.setFlashMode(MODE_TORCH); 
     camera.setParameters(params); 
     camera.startPreview(); 
    } else { 
     if (camera != null) { 

      try {     
       Parameters params = camera.getParameters(); 
       params.setFlashMode(MODE_OFF); 
       camera.setParameters(params);     
      } finally { 
       camera.stopPreview(); 
       camera.release(); 
       mCamera = camera = null; 
      } 
     } 
    } 
} 
+0

する必要がありますか?私たちはAndroids 4.3,4.4、および5.0でNexus 10とまったく同じ問題を抱えています(4.2にはその問題はありません) – DoDo

答えて

1

スレッドをバックグラウンドで実行してUIをハングアップしないようにしてください。

new Thread(new Runnable(){ 
    public void run(){ 
     camera.setPreviewCallback(null); // PreviewCallback de_init. 
     camera.stopPreview(); // stop Preview 
     camera.release(); 
    } 
}).start(); 
+1

ありがとう; UIはハングしていません。 camera.release()はまだこの新しいスレッドにぶら下がっています。なぜか何か手掛かり? – user1137832

+0

このスレッドをチェックして問題を議論してください –

+0

申し訳ありませんがどのスレッド? – user1137832

0

私にとっては、機能するソリューションは次のとおりです。

Try{ 
    camera.stopPreview(); 
    camera.setPreviewCallback(null); 
    camera.release(); 
    camera = null; 
} catch (Exception e){ 
    //... 
} 
0

I`veは、複数のデバイス上でリリース前camera.unlockを()を追加するこのisuue()

camera.stopPreview(); 
camera.setPreviewCallback(null); 
camera.unlock(); 
camera.release(); 
camera = null; 

テストを解きます必要...

+1

残念ながら、これでNexus 10の問題は解決されません。 – DoDo

0

mCamera.stopPreview(); 
mCamera.setPreviewCallback(null); 
mCamera.release(); 

あなたはこれが起こるんどのデバイスでstopPreview betweeen setPreviewCallback(null)を呼び出し、camera.releass

関連する問題