diff options
author | jianhuac <jianhuac@codeaurora.org> | 2016-11-23 15:27:56 +0800 |
---|---|---|
committer | jianhuac <jianhuac@codeaurora.org> | 2016-11-23 15:27:56 +0800 |
commit | 24854383dc7fef62abfd303edbb99eda3d941e1c (patch) | |
tree | 0f280510159f419f67cb7039c1140c5bd20f3fbb | |
parent | eba671dc09fd92c345868655f7a20571b09d1e95 (diff) | |
download | android_packages_apps_Snap-24854383dc7fef62abfd303edbb99eda3d941e1c.tar.gz android_packages_apps_Snap-24854383dc7fef62abfd303edbb99eda3d941e1c.tar.bz2 android_packages_apps_Snap-24854383dc7fef62abfd303edbb99eda3d941e1c.zip |
SnapdragonCamera: ANR when open photo just taken
Camera app stop preview when leave camera app to gallery, and may
take a long time and block the main thread in extreme cases.
Set a timeout to avoid blocking the main thread long time and cause ANR.
Change-Id: I403b4248f6cbeb7e97b6e5704dd29b8b8b911363
CRs-Fixed: 1091688
-rw-r--r--[-rwxr-xr-x] | src/com/android/camera/AndroidCameraManagerImpl.java | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/src/com/android/camera/AndroidCameraManagerImpl.java b/src/com/android/camera/AndroidCameraManagerImpl.java index 486629895..438be2e90 100755..100644 --- a/src/com/android/camera/AndroidCameraManagerImpl.java +++ b/src/com/android/camera/AndroidCameraManagerImpl.java @@ -200,6 +200,30 @@ class AndroidCameraManagerImpl implements CameraManager { return true; } + public boolean waitDone(long timeout) { + final Object waitDoneLock = new Object(); + final Runnable unlockRunnable = new Runnable() { + @Override + public void run() { + synchronized (waitDoneLock) { + waitDoneLock.notifyAll(); + } + } + }; + + synchronized (waitDoneLock) { + mCameraHandler.post(unlockRunnable); + try { + waitDoneLock.wait(timeout); + mCameraHandler.removeCallbacks(unlockRunnable); + } catch (InterruptedException ex) { + Log.v(TAG, "waitDone interrupted"); + return false; + } + } + return true; + } + /** * This method does not deal with the API level check. Everyone should * check first for supported operations before sending message to this handler. @@ -499,7 +523,7 @@ class AndroidCameraManagerImpl implements CameraManager { @Override public void stopPreview() { mCameraHandler.sendEmptyMessage(STOP_PREVIEW); - mCameraHandler.waitDone(); + mCameraHandler.waitDone(200); } @Override |