mirror of
https://github.com/zxing/zxing.git
synced 2025-02-02 05:41:08 -08:00
Made the worker threads shut down synchronously to fix a race condition where the CameraManager could close the camera driver too soon.
git-svn-id: https://zxing.googlecode.com/svn/trunk@357 59b500cc-1b3d-0410-9834-0bbf25fbcc57
This commit is contained in:
parent
e14defda5f
commit
4c10031a67
|
@ -91,8 +91,7 @@ public final class BarcodeReaderCaptureActivity extends Activity {
|
||||||
protected void onPause() {
|
protected void onPause() {
|
||||||
super.onPause();
|
super.onPause();
|
||||||
if (cameraThread != null) {
|
if (cameraThread != null) {
|
||||||
Message quit = Message.obtain(cameraThread.handler, R.id.quit);
|
cameraThread.quitSynchronously();
|
||||||
quit.sendToTarget();
|
|
||||||
cameraThread = null;
|
cameraThread = null;
|
||||||
}
|
}
|
||||||
cameraManager.closeDriver();
|
cameraManager.closeDriver();
|
||||||
|
|
|
@ -76,6 +76,10 @@ final class CameraThread extends Thread {
|
||||||
state = State.DONE;
|
state = State.DONE;
|
||||||
Message quit = Message.obtain(decodeThread.handler, R.id.quit);
|
Message quit = Message.obtain(decodeThread.handler, R.id.quit);
|
||||||
quit.sendToTarget();
|
quit.sendToTarget();
|
||||||
|
try {
|
||||||
|
decodeThread.join();
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
}
|
||||||
Looper.myLooper().quit();
|
Looper.myLooper().quit();
|
||||||
break;
|
break;
|
||||||
case R.id.decode_started:
|
case R.id.decode_started:
|
||||||
|
@ -116,6 +120,15 @@ final class CameraThread extends Thread {
|
||||||
Looper.loop();
|
Looper.loop();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void quitSynchronously() {
|
||||||
|
Message quit = Message.obtain(handler, R.id.quit);
|
||||||
|
quit.sendToTarget();
|
||||||
|
try {
|
||||||
|
join();
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void setDecodeAllMode() {
|
public void setDecodeAllMode() {
|
||||||
Message message = Message.obtain(decodeThread.handler, R.id.set_decode_all_mode);
|
Message message = Message.obtain(decodeThread.handler, R.id.set_decode_all_mode);
|
||||||
message.sendToTarget();
|
message.sendToTarget();
|
||||||
|
|
Loading…
Reference in a new issue