diff options
author | Alan Newberger <alann@google.com> | 2014-11-04 10:18:41 -0800 |
---|---|---|
committer | Alan Newberger <alann@google.com> | 2014-11-04 10:29:04 -0800 |
commit | 25b78c8a18327bd73c3d4d34887dd63953aeaa8c (patch) | |
tree | 96784b2eb856f257e71893ac2f3eeb58a7e2a85b /camera2 | |
parent | c15ddae4862bb9a10b0142fac9558a5f899b1a21 (diff) | |
download | android_frameworks_ex-25b78c8a18327bd73c3d4d34887dd63953aeaa8c.tar.gz android_frameworks_ex-25b78c8a18327bd73c3d4d34887dd63953aeaa8c.tar.bz2 android_frameworks_ex-25b78c8a18327bd73c3d4d34887dd63953aeaa8c.zip |
Ensure default handler always is set if no other error handler registered
To avoid memory leaks we set the error handler to null in activity
onDestroy. But, the agent may receive callbacks after this, so
ensure at minimum that we set the default logging handler to default
handle errors post activity destroy.
Bug: 18200874
Bug: 18202261
Change-Id: Ie7251a149ab02c474d8affd15af6b9ea48c2cdc0
Diffstat (limited to 'camera2')
-rw-r--r-- | camera2/portability/src/com/android/ex/camera2/portability/AndroidCameraAgentImpl.java | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/camera2/portability/src/com/android/ex/camera2/portability/AndroidCameraAgentImpl.java b/camera2/portability/src/com/android/ex/camera2/portability/AndroidCameraAgentImpl.java index cdd6993..201a905 100644 --- a/camera2/portability/src/com/android/ex/camera2/portability/AndroidCameraAgentImpl.java +++ b/camera2/portability/src/com/android/ex/camera2/portability/AndroidCameraAgentImpl.java @@ -55,24 +55,28 @@ class AndroidCameraAgentImpl extends CameraAgent { private final HandlerThread mCameraHandlerThread; private final CameraStateHolder mCameraState; private final DispatchThread mDispatchThread; - private CameraExceptionHandler mExceptionHandler = new CameraExceptionHandler(null) { + + private static final CameraExceptionHandler sDefaultExceptionHandler = + new CameraExceptionHandler(null) { @Override public void onCameraError(int errorCode) { - Log.w(TAG, "onCameraError called before handler set: " + errorCode); + Log.w(TAG, "onCameraError called with no handler set: " + errorCode); } @Override public void onCameraException(RuntimeException ex, String commandHistory, int action, int state) { - Log.w(TAG, "onCameraException called before handler set", ex); + Log.w(TAG, "onCameraException called with no handler set", ex); } @Override public void onDispatchThreadException(RuntimeException ex) { - Log.w(TAG, "onDispatchThreadException called before handler set", ex); + Log.w(TAG, "onDispatchThreadException called with no handler set", ex); } }; + private CameraExceptionHandler mExceptionHandler = sDefaultExceptionHandler; + AndroidCameraAgentImpl() { mCameraHandlerThread = new HandlerThread("Camera Handler Thread"); mCameraHandlerThread.start(); @@ -117,7 +121,8 @@ class AndroidCameraAgentImpl extends CameraAgent { @Override public void setCameraExceptionHandler(CameraExceptionHandler exceptionHandler) { - mExceptionHandler = exceptionHandler; + // In case of null set the default handler to route exceptions to logs + mExceptionHandler = exceptionHandler != null ? exceptionHandler : sDefaultExceptionHandler; } private static class AndroidCameraDeviceInfo implements CameraDeviceInfo { |