进入Activity,在UI线程打开相机,是个IO操作,会阻塞
退出Activity,也在UI线程关闭相机,也会阻塞
给用户的感觉就是卡慢,体验非常不好。
参考其他APP打开二维码扫描时,都会出现一个“正在加载”的页面
解决方案:
开启一个子线程A,用于打开相机
退出时,再开启一个线程B,用于关闭相机
那么问题来了,场景如下:打开相机,又快速退出
A线程刚把相打开打开,正准备让UI线程使用相机(startPreview),却因为B线程已经调用了相机的release,这时就抛出运行时异常挂掉了。
解决方案又来了:
在B线程中,调用A线程的join()方法,意思是等待A线程执行完成了,再去调用相机的release,就不会有问题了。
退出Activity,也在UI线程关闭相机,也会阻塞
给用户的感觉就是卡慢,体验非常不好。
参考其他APP打开二维码扫描时,都会出现一个“正在加载”的页面
解决方案:
开启一个子线程A,用于打开相机
退出时,再开启一个线程B,用于关闭相机
那么问题来了,场景如下:打开相机,又快速退出
A线程刚把相打开打开,正准备让UI线程使用相机(startPreview),却因为B线程已经调用了相机的release,这时就抛出运行时异常挂掉了。
解决方案又来了:
在B线程中,调用A线程的join()方法,意思是等待A线程执行完成了,再去调用相机的release,就不会有问题了。