简介: 导致 App 性能低下的原因有很多,除去设备硬件和软件的外部因素,其中大部分是开发者错误地使用线、系统函数、编程范式、数据结构等导致的。即便是较有经验的程序员,也很难在开发时就能避免所有导致性能低下的“坑”,因此解决性能问题的关键是在于能不能尽早地发现和定位和捕获这些错误。
项目遇到的崩溃/卡顿/ANR/OOM/启动慢
1.项目遇到的奔溃/卡顿/ANR/OOM/启动慢
1.1项目背景
项目背景主要是公司开发项目,老板提起需求,产品经理规划需求以及文档,开发人员根据需求来规划开发,项目开发人员(两个前端开发,三个Java开发,两个测试,一个产品,一个ui);项目组织架构:
(小程序/H5):uniapp架构+U-APM监听统计+canvas绘制海报B端管理系统: Vue+Axios+Elementui+ueditor135编辑器+
项目名叫:值得买商城,主要是一个一体化的的B2C平台,包含内部商城管理系统(客服/运营可以在系统发布活动以及商品,管理商品、订单、会员,并且处理用户的询问以及投诉),C端小程序APP端(H5、APP端直接给用户提供一个便捷简介,实惠多优惠多的一个线上购物平台,通过活动优惠以及地推方式分享产生裂变,通过友盟统计抓取不同用户的喜好,定时更新推流以及发放优惠),项目类似京东商城、天猫商城,可以在商城浏览商品、下订单,会员用户以及星级用户可以参加各种活动。
电商模式:
1.1:B2B:商家到商家。比如阿里巴巴,慧聪网、铭万网。
1.2:B2C:商家到用户。比如京东。
1.3:C2C:用户到用户。比如淘宝。
1.4:B2B2C:商家到商家到用户。比如天猫。
1.5:O2O:线上到线下。比如百度外卖、美团、饿了么。
1.2所遇到的挑战/问题
1.项目上线例如代码异常或者控制台异常监听不到不太好排查
2.服务端队列接口其中一个挂掉项目直接奔溃
3.类似登录按钮点击请求频繁点击请求多次
4.页面组件不统一导致需求更改多处地方变动
5.切换环境或者项目距配置导致异常axios拦截失败
1.3解决问题的步骤
1. 最初项目开发中引入的fundebug第三方插件监听代码异常,但是部分拦截异常捕获不到{H5以及小程序使用的是fundebug,APP使用
1.4项目总结
遇到问题,不要心急也不需要慌,既然问题出现了,按照问题出现的时间、方式、情况进行排查,找到问题之后,去一步步尝试解决就好,首先要把思路屡清楚,实战中总是会遇到怪怪的问题,用心去做就OK了,部分想系统的表格、表单,网站中的列表,标题栏等等模块项目中尽量去封装集成为组件库统一管理,减少工作量以及代码冗余。
2.产品体验内容:集成/接入/使用
这里来说一下
2.1产品体验内容:集成/接入/使用
2.1.1首先进入网址登录注册应用获取下载SDK
U-APM网站地址
2.1.2 获取到自己的应用key以及基础sdk
注意:
· 应用的安卓版和iOS版不能使用相同的AppKey,需要分开注册。
· 【友盟+】的应用名与实际应用名和包名无关,若注册应用时,提示应用名称已存在,建议命名为应用名+平台(iOS/Android)。
maven自动集成(推荐)
通过在Android Studio工程build.gradle配置脚本中添加maven线上依赖,导入最新版本组件化统计SDK。
maven依赖配置
在工程build.gradle配置脚本中buildscript和allprojects段中添加【友盟+】SDK新maven仓库地址。
maven { url 'https://dl.bintray.com/umsdk/release' }
buildscript { repositories { google() jcenter() maven { url 'https://dl.bintray.com/umsdk/release' } } dependencies { classpath 'com.android.tools.build:gradle:3.4.0' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } allprojects { repositories { google() jcenter() maven { url 'https://dl.bintray.com/umsdk/release' } } }
在工程App 对应build.gradle配置脚本dependencies段中添加统计SDK库和其它库依赖:
// 下面各SDK根据宿主App是否使用相关业务按需引入。
// OAID目前为目前国内市场主流的Android Q设备标识,可根据需要选择。
// 友盟统计SDK implementation 'com.umeng.umsdk:common:9.3.3'
// 版本号(必选) implementation 'com.umeng.umsdk:asms:1.1.4'
// asms包依赖(必选) implementation 'com.umeng.umsdk:game:9.2.0+G'
//游戏统计SDK依赖(可选) implementation 'com.umeng.umsdk:apm:1.1.0'
// U-APM产品包依赖(必选)
如果您使用的是9.0.4以上版本SDK,同时集成使用了umeng-apm-vx.x.x.aar插件,则默认开启新版本的稳定性功能
-keep class com.uc.** {*;}
如果开发者自己捕获了错误,需要手动上传到【友盟+】服务器可以调用下面两种方法:
@param {e}错误异常
@param{type}自定义错误类型
public static void UMCrash.generateCustomLog(Throwable e, String type)
方法一示例:
try { // 抛出异常的代码 }
catch (Exception e) {
UMCrash.generateCustomLog(e, "UmengException"); }
方法二:
@param {e}错误异常
@param{type}自定义错误类型
public
static
void UMCrash.generateCustomLog(
String e,
String
type)
捕获成功查看友盟+U-APM可视化工具:
2.2集成/接入/使用体验总结与分享
首先来说一下市面上目前:导致 App 性能低下的原因有很多,除去设备硬件和软件的外部因素,其中大部分是开发者错误地使用线、系统函数、编程范式、数据结构等导致的。即便是较有经验的程序员,也很难在开发时就能避免所有导致性能低下的“坑”,因此解决性能问题的关键是在于能不能尽早地发现和定位和捕获这些错误。随着App业务的与日俱增,各个系统也越来越复杂,服务间的调用,服务的依赖,以及分析服务的性能问题也越棘手,因此引入性能监控平台尤为重要。能不能快速、准确、丰富的定位错误类型,是衡量性能监控产品的头要因素。以
2.3对产品提出的建议/意见
作为开发者对U-APM的建议:
1.登录一个账号就可以有一个选择平台来切换ios/安卓来直接看到对应数据的统计,现在需要来回折腾有点麻烦
2.目前监测统计错误异常只支持IOS跟安卓APP,小程序,H5以及公众号这些目前不支持
3.如果从监测的异常有录屏功能就更好了,这样会直接查看录屏回放效果杠杠的~
原文链接
本文为阿里云原创内容,未经允许不得转载。