我正在构build一个使用谷歌视觉api的qr扫描器的应用程序。 在读取qr码后,我无法停止相机。 stream程是MainActivity -> QrActivity一旦qr-code收到检测到的应用程序应该返回到主要活动。

如果我不叫cameraSource.release()它工作正常,但设备变热了很多,并对电池消耗有重大影响。 但是,如果我释放相机源mainActivity变得无法响应,应用程序将崩溃。

为什么它变得没有反应? 哪里是释放相机源的正确位置?

QrActivity

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_qr); cancelBtn = (Button) findViewById(R.id.cancel_button); cancelBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { onBackPressed(); } }); new QrReader(this); }

QrReader类

public class QrReader { private static final String TAG = "QrReader"; private SurfaceView cameraView; private TextView barcodeInfo; private BarcodeDetector barcodeDetector; private CameraSource cameraSource; private Activity mActivity; private AccessPointCredentials barCodeData; public QrReader(Activity activity) { this.mActivity = activity; cameraView = (SurfaceView) mActivity.findViewById(R.id.camera_view); barcodeInfo = (TextView) mActivity.findViewById(R.id.code_info); barcodeDetector = new BarcodeDetector.Builder(mActivity) .setBarcodeFormats(Barcode.QR_CODE) .build(); cameraSource = new CameraSource .Builder(mActivity, barcodeDetector) .setAutoFocusEnabled(true) .build(); cameraView.getHolder().addCallback(new SurfaceHolder.Callback() { @Override public void surfaceCreated(SurfaceHolder holder) { cameraSource = new CameraSource .Builder(mActivity, barcodeDetector) .setAutoFocusEnabled(true) .setFacing(0) .build(); try { cameraSource.start(cameraView.getHolder()); } catch (Exception ioe) { ioe.printStackTrace(); } } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } @Override public void surfaceDestroyed(SurfaceHolder holder) { // Log.i(TAG, "surfaceDestroyed: stopping camera Source"); // cameraSource.release(); } }); barcodeDetector.setProcessor(new Detector.Processor() { @Override public void release() { Log.i(TAG, "release: "); } @Override public void receiveDetections(Detector.Detections detections) { final SparseArray barCodes = detections.getDetectedItems(); if (barCodes.size() != 0) { Log.i(TAG, "received a Barcode"); barcodeInfo.post(new Runnable() { // Use the post method of the TextView public void run() { barcodeInfo.setText(barCodes.valueAt(0).displayValue); } }); Gson g = new Gson(); try { barCodeData = g.fromJson(barCodes.valueAt(0).rawValue, AccessPointCredentials.class); } catch (Exception e) { barCodeData = new AccessPointCredentials(); barCodeData.setSsid(barCodes.valueAt(0).rawValue); barCodeData.setPass(null); e.printStackTrace(); } connectToWifi(barCodeData); // CameraSource.release causes app to freeze // cameraSource.release(); } } }); } private void connectToWifi(final AccessPointCredentials credentials) { //wificonnect code } }

已经过了3个月了,但我却偶然发现了同样的问题,并弄清楚了。 receiveDetections方法内的代码在另一个线程上运行,所以如果你想做一些需要UI线程的东西,你需要从一个处理程序中发布它:

Handler handler = new Handler(Looper.getMainLooper()); handler.post(new Runnable() { @Override public void run() { cameraSource.release(); } });

嘿,有什么更新? 我刚刚遇到类似的问题,我尝试处理这些release方法,但不工作。 我只find了一个快速修复/解决方法。 希望有一个优雅的解决scheme。

我的情况是,应用程序用户可以扫描QR码然后付款。

MainActivity

我所有的其他意见是片段/ ListFragment

ScanMainController

BarcodeDetector

CameraSource

SurfaceView

我的情况是这样的,一旦我扫描QR码,我推到另一个页面用于付款。 但我需要find一种方法来停止QRCode扫描器,因为我只希望receiveDetections被调用一次。 在iOS中,我曾经将cameraSource.release();设置delegate to nil ,它与cameraSource.release();的function相同cameraSource.release(); 在Android中。 但是,我只是找不到适当的位置来调用release()方法。

如果我主动调用release() ,那么当用户想通过点击抽屉菜单导航到其他页面时,我的FragmentTransaction提交将被整个应用程序冻结。 然后Android系统会popup告诉我的应用程序没有响应。

我通过在“receiveDetections”中添加一个“布尔”标志来快速修复,以确保我只推一次视图。 有用。 但是我正在寻找一种更优雅的方式和“正确”的方式来做到这一点。

谢谢

Android应用冻结流程分析,Android cameraSource.stop()导致应用程序冻结相关推荐

  1. android app启动流程分析,Android应用开发之Android 7.0 Launcher3的启动和加载流程分析...

    本文将带你了解Android应用开发Android 7.0 Launcher3的启动和加载流程分析,希望本文对大家学Android有所帮助. Android 7.0 Launcher3的启动和加载流程 ...

  2. Android -- Wifi启动流程分析

    Android -- Wifi启动流程分析 Android网络各个模式中,Wifi应该是目前最常用的一种网络方式了:下面就简单介绍下Android中Wifi的启动流程. 当我在Setting菜单里点击 ...

  3. Android SDCard UnMounted 流程分析(三)

    前篇地址 Android SDCard UnMounted 流程分析(一) Android SDCard UnMounted 流程分析(二) 前一篇讲到SDCard unmout onEvent 发送 ...

  4. android camera2 API流程分析

    Android camera2 API流程分析 Android5.0之后,新推出来了一个类,android.hardware.camera2,与原来的camera的类实现照相和拍视频的流程有所不同,原 ...

  5. Android UI绘制流程分析(三)measure

    源码版本Android 6.0 请参阅:http://androidxref.com/6.0.1_r10 本文目的是分析从Activity启动到走完绘制流程并显示在界面上的过程,在源码展示阶段为了使跟 ...

  6. 【SemiDrive源码分析】【X9芯片启动流程】27 - AP1 Android Preloader启动流程分析(加载atf、tos、bootloader镜像后进入BL31环境)

    [SemiDrive源码分析][X9芯片启动流程]27 - AP1 Android Preloader启动流程分析(加载atf.tos.bootloader镜像后进入BL31环境) 一.Android ...

  7. android 休眠唤醒驱动流程分析,Android 电源管理——gotosleep和userActivity关注

    一.Android power management应用层分析 Android提供了android.os.PowerManager类,该类用于控制设备的电源状态的切换. 该类对外有三个接口函数: 1. ...

  8. android volume挂载流程,Android SDCard UnMounted 流程分析(一)

    Android SDCard框架 Android SDCard框架,我们修改一般涉及到四大模块 Linux Kernel 用于检测热拔插,作为框架开发者来说,这者不用涉及 Vold 作为Kernel ...

  9. Android 亮屏流程分析

    https://blog.csdn.net/FightFightFight/article/details/79808100 相关文章: [Android Framework] 8.1 PowerMa ...

最新文章

  1. 七丶青龙nvjdc部署教程+短信验证登录对接傻妞
  2. RecyclerView滑动到指定位置,并置顶
  3. 利用xml+xsl给客户机添加超级管理帐户!
  4. 将SQL文件导入Hive
  5. ionic4集成高德地图踩坑(二)
  6. Tapable.plugin is deprecated. Use new API on `.hooks` instead
  7. AI需要你帮忙 | 把两栖爬行动物框出来,提高AI识别准确率
  8. 两日公开课:伯克利深度强化学习训练营 | 视频+PPT
  9. 让apache支持ssl
  10. linux下如何安装凤凰系统,凤凰系统Phoenix OS U盘版安装制作教程
  11. 计算机导论学后感5000字,计算机导论学习心得体会
  12. 电容或电感的电压_用动画来解释电感和电容元件上电压电流超前滞后的关系
  13. 鸿蒙系统是不是无法注册gmail邮箱也无法正常使用youtube?
  14. MSP430FR5994LannchPad开发笔记之一:CCS+DriverLib建立工程模板,及使用eZ-FET Debug进行printf
  15. SpringBoot 集成 logBack
  16. 电商项目 Java还是Django_Django电商平台Saleor搭建初体验
  17. MYSQL中where条件后写上1=1 是什么意思?
  18. [转]优秀程序员的45个习惯
  19. 【转载】裸眼识别二维码
  20. Spring aop(Aspectj)对dynamic proxy的类是无能为力的

热门文章

  1. 方法重写 override 和 new 的区别 [C#]_lucky dog_百度空间
  2. iOS一行代码移除子视图,或者layer。iOS获取近八天日期数组
  3. 【macOS游戏】Gear.Club Stradale赛车游戏
  4. matlab 职坐标,Axure入门与基础常用函数解析整理
  5. #MH370失联五周年# 从马航失联五周年看航空安全
  6. NPM酷库:numeral,格式化数字
  7. 武汉智能网联道路智能化建设规范
  8. ultraos win10启动盘_如何使用软碟通制作win10启动U盘?
  9. 寒武纪面试——深度学习/算法面试岗
  10. core data [Pro.Core.Data.for.iOS(2nd)].Michael.Privat pdf迅雷高速下载