android 图片二维码识别和保存(二)
续上一篇,开发图片二维码识别功能后,我们对功能进行性能分析内存占用显著提高了,不使用该功能内存占用大约是147M,使用这个功能多次以后,高达203M。
因此对功能进行研究,发现每次生成的图片没有即时的释放,导致内存中的图片不断累积,内存占用不断攀升。因此,需要对图片进行释放,释放的时候需要特别关注的地方有:
1.释放注意图片的状态。
2.注意异常的捕获。
下面就是图片释放的有关代码。
/** * 回收bitmap */ public static void recycleBitmap(Bitmap bitmap ) { if(bitmap != null && !bitmap.isRecycled()){ bitmap.recycle(); bitmap = null; } }
对于异常的捕获主要是需要关注图片在进行encode和decode过程中的处理,原来的方法应该改为如下:
public static Result handleQRCodeFormBitmap(Bitmap bitmap) { Map<DecodeHintType, Object> hints = new EnumMap<>(DecodeHintType.class); hints.put(DecodeHintType.CHARACTER_SET, "utf-8"); hints.put(DecodeHintType.TRY_HARDER, Boolean.TRUE); hints.put(DecodeHintType.POSSIBLE_FORMATS, BarcodeFormat.QR_CODE); RGBLuminanceSource source = null; QRCodeReader reader2 = null; Result result = null; try { source = new RGBLuminanceSource(bitmap); BinaryBitmap bitmap1 = new BinaryBitmap(new HybridBinarizer(source)); reader2 = new QRCodeReader(); result = reader2.decode(bitmap1, hints); } catch (Exception e) { e.printStackTrace(); if (source != null && reader2 != null) { BinaryBitmap bitmap2 = new BinaryBitmap(new GlobalHistogramBinarizer(source)); try { result = reader2.decode(bitmap2, hints); } catch (Exception e1) { e1.printStackTrace(); } } } return result; }
当然对于整个流程来说还有其他的优化方法,比如将保存的图片格式压缩比例都进行调整,在不影响识别的前提下,将图片进行处理,这样既能节省cpu时间又能节省内存开销。
如果大家有其他更好的方案,欢迎提出。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
android 图片二维码识别和保存(一)
最新业务开发二维码识别的功能,这个功能,在很多应用上都有,比如微信长按图片识别二维码,如果图片中存在可以识别的二维码时,可以增加一个选项 识别二维码。那么如何去实现这个功能呢。这里其实也非常简单,首先对图片进行二维码识别,识别结果返回的时候判断是否有二维码,有则增加识别二维码选项。 对于识别二维码,目前主流的就是zxing和zbar,对于这两者的选型,一般来说移动智能手机更多选择zxing,因为zxing更适合,zbar适合嵌入式硬件,两者对于QR图形码能力相差无几,但是zxing的资料明显更多一些。各位根据自己的情况进行调整。 二维条码/二维码(2-dimensional bar code)是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的。 在代码编制上巧妙地利用构成计算机内部逻辑基础的“0”、“1”比特流的概念,使用若干个与二进制相对应的几何形体来表示文字数值信息,通过图象输入设备或光电扫描设备自动识读以实现信息自动处理:它具有条码技术的一些共性:每种码制有其特定的字符集。 每个字符占有一定的宽度;具有一定的校验功能等。同时还具有对不...
-
下一篇
Android实现App版本自动更新
原文: Android实现App版本自动更新 现在很多的App中都会有一个检查版本的功能。例如斗鱼TV App的设置界面下: 当我们点击检查更新的时候,就会向服务器发起版本检测的请求。一般的处理方式是:服务器返回的App版本与当前手机安装的版本号进行对比。 (1)如果服务器所返回的版本号大于当前App版本号那么此时手机所安装的App不是最新版。可以提示用户升级。 (2)如果不大于当前版本号,可以提示用户为最新版本: 版本升级,也分为两种处理方式: (1)跳转到App某市场(例如:360手机助手),然后根据包名在市场定位到该App,通过市场下载更新安装。 (2)在本App中实现Apk下载,下载完成后更新安装。 本篇博客的内容将围绕如何实现Apk下载,下载完成后更新安装来展开。 下面我将内容大致分为以下几个部分: (1)App版本检测 (2)Apk下载 (3)Apk更新安装 (4)对以上功能进行封装 基于以上4部分,我们逐一展开。 1.App版本检测: 要实现App的更新下载,我们上面介绍了,前提是服务器要保存一个App的版本号(通常的方式是保存versionCode,当然你要对比ve...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS8编译安装MySQL8.0.19
- CentOS6,CentOS7官方镜像安装Oracle11G
- CentOS关闭SELinux安全模块
- SpringBoot2全家桶,快速入门学习开发网站教程
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作