移动APP卡顿问题解决实践

一、项目背景 本APP为面向用户的一款基于NFC的安全支付产品。本APP本作品将密码学原理、计算机技术、NFC通信技术和数字货币思想有机结合,在全面保障安全性的同时最大限度的提高了消费者的支付体验。相对于传统方案,本作品具有以下特点:1)实现货币的数字化;2)商家与用户双向身份认证;3)交易过程安全保障;4)完善的移动支付体系;5)离线支付,脱离网络;6)账户丢失可找回;7)差错协商,保障交易双方利益;8)标签型商城,便捷最大化;9)成本低廉,便于推广。
用户是需要使用本产品进行消费的客户,需要安装用户钱包客户端。主要功能结构图如下所示:
移动APP卡顿问题解决实践
文章图片

商家是商品或者服务的提供方,需要安装商家客户端。主要功能结构图如下所示:
移动APP卡顿问题解决实践
文章图片

二、所遇到的挑战 本APP用户反馈APP使用过程中存在卡顿等问题。对于手机APP而言,流畅度的重要性是不言而喻。为了提升流畅度,Google对Android系统进行了大量的优化,包括使用了GPU硬件加速,引入了VSync,把Dalvik换成了Art等。那么对于我们的APP,出现卡顿问题,势必会影响用户体验感,所以必须对APP卡顿的问题进行分析,并且予以解决。
三、解决问题的步骤 首先,我们进行了几轮的代码review,尝试从逻辑层面优化代码结构,从而减少卡顿问题的发生。这方面的优化,主要是找出在主线程中耗时较大的函数,通过优化逻辑去减少API的耗时,分析CPU的工作,尽量让CPU执行主线程中的工作。这方面的工作有很多,比如优化逻辑去减少API的耗时,缓存数据以方便更快地对数据进行加载,把耗时的操作移出主线程,在子线程中进行操作。
其次,优化数据库表结构,将一些常用的数据放到缓存中,在异步更新到数据库中。可以把所有的数据库操作都统一放到一个线程队列当中。
【移动APP卡顿问题解决实践】最后,需要完善监控体系。因为虽然产品上线之前,必然会经过严密的测试工作,但还由于模式的固定以及测试死角的存在,比如,对于较大规模的APP产品,测试人员是基本无法做到覆盖到全部的手机机型和ROM,所以很多问题必然还是要依赖于真正上线之后用户的反馈。在这种情况下,完善的质量监控方案就显得非常必要,所以需要建立一套牢固的监控体系。这样,对线上产品的APP质量问题才能第一时间召回,并做到快速修复。那对于如何完善监控体系,目前来看,是有两个选择的,一种是基于开源的Skywalking、Cat、Zipkin、Pinpoint等APM系统,以Skywalking为例来讲,其是一款基于分布式跟踪的应用程序性能监控系统。SkyWalking 的核心是数据分析和度量结果的存储平台,通过 HTTP 或 gRPC 方式向 SkyWalking Collecter 提交分析和度量数据,SkyWalking Collecter 对数据进行分析和聚合,存储到 Elasticsearch、H2、MySQL、TiDB 等其一即可,最后我们可以通过 SkyWalking UI 的可视化界面对最终的结果进行查看。Skywalking 支持从多个来源和多种格式收集数据:多种语言的 Skywalking Agent 、Zipkin v1/v2 、Istio 勘测、Envoy 度量等数据格式。整体架构看似模块有点多,但在实际上还是比较清晰的,主要就是通过收集各种格式的数据进行存储,然后展示。所以搭建 Skywalking 服务我们需要关注的是 SkyWalking Collecter、SkyWalking UI 和 存储设备,SkyWalking Collecter、SkyWalking UI 官方下载安装包内已包含,最终我们只需考虑存储设备即可。但是使用这种系统,就会面临工程师不熟悉,工期紧张等问题。第二种选择就是使用成熟的APM系统,这种,不言而喻,会有较大的短期资金压力,但是鉴于我们项目的紧迫性,我们选择使用友盟+应用性能监控平台U-APM。友盟+的U-APM应用性能监控平台基于强大的捕获采集能力,快速定位错误根源,提供用户维度的崩溃统计,快速还原崩溃现场,并设立多种警告通道,助力开发者7*24监控应用情况。非常适用于我们的APP。
四、项目总结 交易安全是当前互联网+支付存储应用设计的重中之重。我们的APP为 了实现交易流程的安全与快捷,在使用 NFC 功能短距安全传输的同时,设计了以下交易流程增强安全性。本APP具有数字化、移动化、高效化的优势特点。但在APP运行期间出现了卡顿的问题,影响了用户体验感,于是我们通过修改代码逻辑及数据库表结构,同时完善监控体系的方法解决优化了这个问题。
作者:陈静茹

    推荐阅读