2014-05-03 13 views
7

Moja aplikacja używa aparatu. Mam CameraActivity klasa i CameraFragment klasyAparat nie jest wypuszczany po awarii aplikacji.

CameraFragment jest odpowiedzialna za udostępnianie aparatu:

@Override 
public void onPause() { 
    super.onPause(); 

    if (mCamera != null) { 
     mCamera.release(); 
     mCamera = null; 
    } 
} 

Moja aplikacja rozbił się podczas robienia zdjęcia. z jakiegoś powodu kamera nie została zwolniona. teraz nie mogę nigdzie przenieść obiektu aparatu fotograficznego! Również aplikacja aparatu fotograficznego z Androidem nie działa z błędem "Nie można połączyć się z kamerą"

teraz wiem, że kamera jest obiektem singleton i tylko jedna aplikacja może ją pobrać w czasie. Nie rozumiem, dlaczego funkcja onPause nie działała i jak mogę lepiej chronić instancję kamery?

Również, jeśli coś takiego się zdarza, jak mogę wymusić zwolnienie obiektu kamery? to dobry pomysł?

Niestety nie mam informacji, dlaczego aplikacja uległa awarii na pierwszym miejscu.

Dzięki za pomoc.

Roy

+0

Dobrze zgaduję OnPause nie działać, bo to _crashed_. Domyślam się, że obiekt kamery został zwolniony po awarii aplikacji. – keyser

+0

obiekt kamery nie jest zwolniony, że główny problem (i dziwna część). obiekt kamery został złapany. jedynym sposobem na zwolnienie obiektu kamery było ponowne uruchomienie urządzenia. – royB

+2

Masz rację, może się to zdarzyć z jakiegoś powodu. [This] (http://stackoverflow.com/a/17320457/645270) powinno pomóc. – keyser

Odpowiedz

0

To powinno pomóc:

private static void unCaughtExceptionHandler() { 
    Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() { 
     public void uncaughtException(final Thread thread, final Throwable ex) { 
      ex.printStackTrace(); 
      releaseCamera(); 
      System.exit(0); 
     } 
    }); 
} 
Powiązane problemy