2017-10-04 7 views
-2

Android Camera2 APIを使用しており、15枚の画像を連続して撮影したいと考えています。問題は、いくつかの写真を正常に撮影するが、6〜8枚の写真の後にクラッシュすることである。ここでAndroidアプリケーションがクラッシュすることがありますが、しばらく時間がかかり、クラッシュしないで良い状態になります。

はログです:

レガシー-CameraDevice-JNI:LegacyCameraDevice_nativeGetSurfaceId: 表面からネイティブのサーフェスを取得できませんでした。 E/AndroidRuntime:FATAL 例外:スレッド-1095 プロセス:com.example.grobomac.traindriver、PID:11690 java.lang.IllegalArgumentException:サーフェスに有効なネイティブがありません サーフェス。 でandroid.hardware.camera2.legacy.LegacyCameraDevice.nativeGetSurfaceId(ネイティブ 方法) でandroid.hardware.camera2.legacy.LegacyCameraDevice.getSurfaceId(LegacyCameraDevice.java:658) android.hardware.camera2.legacyで android.hardware.Camera $ EventHandler.handleMessageで android.hardware.camera2.legacy.RequestThreadManager $ 2.onPictureTaken(RequestThreadManager.java:225) (Camera.javaで.LegacyCameraDevice.containsSurfaceId(LegacyCameraDevice.java:678) : 1272) android.os.Han android.hardware.camera2.legacy.CameraDeviceUserShim $ CameraLooper.run(CameraDeviceUserShim.java:136) でdler.dispatchMessage(Handler.java:111)android.os.Looper.loop(Looper.java:207)で java.lang.Thread.run(Thread.java:818)で 10-04 14:26:59.566 11690から11690/E/AndroidCameraApi com.example.grobomac.traindriver:

とコードI onPause使用:

public void onImageAvailable(ImageReader reader) { 
        Image image = null; 
        try { 
         image = reader.acquireLatestImage(); 
         ByteBuffer buffer = image.getPlanes()[0].getBuffer(); 
         byte[] bytes = new byte[buffer.capacity()]; 
         buffer.get(bytes); 
         save(bytes); 
         mBitmapToSave1 = BitmapFactory.decodeByteArray(bytes, 0, bytes.length); 
         mBitmapToSave = BitmapFactory.decodeByteArray(bytes, 0, bytes.length); 
         Bitmap scaled = Bitmap.createScaledBitmap(mBitmapToSave, width, height, true); 
         int w = scaled.getWidth(); 
         int h = scaled.getHeight(); 
         // Setting post rotate to 90 
         Matrix mtx = new Matrix(); 
         mtx.postRotate(-180); 
         // Rotating Bitmap 
         mBitmapToSave = Bitmap.createBitmap(scaled, 0, 0, w, h, mtx, true); 
         // mBitmapToSave = Bitmap.createBitmap(width+rowPadding/pixelStride,height, Bitmap.Config.RGB_565); 
         // mBitmapToSave.copyPixelsToBuffer(buffer); 

         if (detector.isOperational() && mBitmapToSave != null) { 
          Frame frame = new Frame.Builder().setBitmap(mBitmapToSave).build(); 
          SparseArray<Face> faces = detector.detect(frame); 

          for (index = 0; index < faces.size(); ++index) { 
           Face face = faces.valueAt(index); 
          } 
          if (faces.size() == 0) { 
           MediaPlayer mediaPlayer = MediaPlayer.create(getApplicationContext(), R.raw.not); 
           mediaPlayer.start(); 
           //Toast.makeText(AndroidCamera2API.this, "Face Not detected Adjust Camera Properly", Toast.LENGTH_SHORT).show(); 
          } else { 
            c++; 
            Toast.makeText(AndroidCamera2API.this, "Face Found " + "\n", Toast.LENGTH_SHORT).show(); 
            //Toast.makeText(AndroidCamera2API.this, "Saved:" + file, Toast.LENGTH_SHORT).show(); 
            setFileToUpload(); 
            //file.delete(); 
            // if(file.exists()){ 
            //file.getCanonicalFile().delete(); 
            // if(file.exists()){ 
            //  getApplicationContext().deleteFile(file.getName()); 
            // } 
           // } 
           a++; 

            Toast.makeText(AndroidCamera2API.this, "" +c, Toast.LENGTH_SHORT).show(); 


           // Toast.makeText(AndroidCamera2API.this, "completed" , Toast.LENGTH_SHORT).show(); 


          } 
         } 
         }catch(FileNotFoundException e){ 
          e.printStackTrace(); 
         } catch(IOException e){ 
          e.printStackTrace(); 
         } finally{ 
          if (image != null) { 
           image.close(); 
          } 
         } 
        } 

私はOnResumeで写真を撮る:

答えて

0

これが関連しているが、使用後にビットマップをリサイクルしていないかどうかは不明です。ガベージコレクタ(GC)は、アンドロイドバージョン3以上からあなたのためにこれを取る必要がありますが、新しいものをすばやく作成しているので、時間がないことがあります。あなたのスタックトレースにOOM例外がないので、それはおそらくそれではありませんが、とにかくリサイクルしてGCが大した作業をする必要はありません。

関連する問題