拍照结束后报一下错误,报错堆栈:
Handler (android.os.Handler) {f06e674} sending message to a Handler on a dead thread
java.lang.IllegalStateException: Handler (android.os.Handler) {f06e674} sending message to a Handler on a dead thread
at android.os.MessageQueue.enqueueMessage(MessageQueue.java:572)
at android.os.Handler.enqueueMessage(Handler.java:778)
at android.os.Handler.sendMessageAtTime(Handler.java:727)
at android.os.Handler.sendMessageDelayed(Handler.java:697)
at android.os.Handler.post(Handler.java:427)
at android.hardware.camera2.impl.CameraDeviceImpl$CameraHandlerExecutor.execute(CameraDeviceImpl.java:2369)
at android.hardware.camera2.impl.CallbackProxies$SessionStateCallbackProxy.onClosed(CallbackProxies.java:104)
at android.hardware.camera2.impl.CameraCaptureSessionImpl.close(CameraCaptureSessionImpl.java:596)
at android.hardware.camera2.impl.CameraCaptureSessionImpl.finalize(CameraCaptureSessionImpl.java:887)
at java.lang.Daemons$FinalizerDaemon.doFinalize(Daemons.java:291)
at java.lang.Daemons$FinalizerDaemon.runInternal(Daemons.java:278)
at java.lang.Daemons$Daemon.run(Daemons.java:139)
at java.lang.Thread.run(Thread.java:920)
解决方案:Pause()里的stopBackgroundThread去除
@Override
public void onPause() {
closeCamera();
//stopBackgroundThread();
super.onPause();
}
在CameraDevice.StateCallback的onClosed内执行。
private final CameraDevice.StateCallback mCameraDeviceStateCallback = new CameraDevice.StateCallback() {
@Override
public void onOpened(@NonNull CameraDevice cameraDevice) {
...
}
@Override
public void onDisconnected(@NonNull CameraDevice cameraDevice) {
....
}
@Override
public void onError(@NonNull CameraDevice cameraDevice, int error) {
}
@Override
public void onClosed(@NonNull CameraDevice camera) {
super.onClosed(camera);
stopBackgroundThread();
}
}