項目遇到的崩潰/卡頓/ANR/OOM/啟動慢
1.1項目背景
1.2所遇到的挑戰
1.3解決問題的步驟
1.4項目總結
2. 産品體驗内容:內建/接入/使用
2.1內建/接入/ 友盟+ 應用性能監控平台 U-APM
2.2內建/接入/使用體驗總結與分享
2.3對産品提出的建議/意見
1.項目遇到的奔潰/卡頓/ANR/OOM/啟動慢
項目背景主要是公司開發項目,老闆提起需求,産品經理規劃需求以及文檔,開發人員根據需求來規劃開發,項目開發人員(兩個前端開發,三個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. 最初項目開發中引入的fundebug第三方插件監聽代碼異常,但是部分攔截異常捕獲不到{H5以及小程式使用的是fundebug,APP使用
友盟的U-APM去接入捕獲異常}
首先檢視第三方捕獲的異常區偏差問題,通過開發者工具調試debugger排查異常出現的位置,檢視是代碼邏輯問題還是其他異常,依次去排查解決
遇到問題,不要心急也不需要慌,既然問題出現了,按照問題出現的時間、方式、情況進行排查,找到問題之後,去一步步嘗試解決就好,首先要把思路屢清楚,實戰中總是會遇到怪怪的問題,用心去做就OK了,部分想系統的表格、表單,網站中的清單,标題欄等等子產品項目中盡量去封裝內建為元件庫統一管理,減少工作量以及代碼備援。
2.産品體驗内容:內建/接入/使用
這裡來說一下
內建接入以及使用方式,在這裡首先先說明一下我個人在開發中為什麼會選擇友盟的這款産品api在項目中使用,在解決問題的步驟中我提到過,項目中h5跟小程式使用的一個第三方fundebug來抓取以及捕獲異常,APP中開發使用U-APM捕獲抓取錯誤異常并監聽,{ fundebug捕獲異常以及監聽方面沒有U-APM全面,隻能監聽到普通異常,U-APM可以監聽到奔潰分析,自定義錯誤異常,啟動分析,卡頓分析以受影響人數等等},唯一覺得美中不足的就是,U-APM隻支援安卓跟IOS
2.1産品體驗内容:內建/接入/使用
2.1.1首先進入網址登入注冊應用擷取下載下傳SDK
U-APM網站位址
https://apm.umeng.com/apps/create2.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産品包依賴(必選)
崩潰/ANR類型
如果您使用的是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"); }
方法二:
public
static
void
UMCrash.generateCustomLog(
String
e,
type
)
捕獲成功檢視友盟+U-APM可視化工具:
詳細文檔檢視官放文檔比較清晰明了:
https://developer.umeng.com/docs/193624/detail/194590首先來說一下市面上目前:導緻 App 性能低下的原因有很多,除去裝置硬體和軟體的外部因素,其中大部分是開發者錯誤地使用線、系統函數、程式設計範式、資料結構等導緻的。即便是較有經驗的程式員,也很難在開發時就能避免所有導緻性能低下的“坑”,是以解決性能問題的關鍵是在于能不能盡早地發現和定位和捕獲這些錯誤。随着App業務的與日俱增,各個系統也越來越複雜,服務間的調用,服務的依賴,以及分析服務的性能問題也越棘手,是以引入性能監控平台尤為重要。能不能快速、準确、豐富的定位錯誤類型,是衡量性能監控産品的頭要因素。以
友盟+的U-APM應用性能監控平台為例,無論是 Java、Native崩潰,還是 ANR、系統各種強殺等問題;異常問題U-APM都可以捕獲到,并會生成内容完整、豐富、全面的日志。作為App開發者,相信大家一定遇到過類似的尴尬問題:故障永遠都是你的客戶告訴你的,而在什麼時候發生的,你也無法确定,隻能通過客戶的回報倒推時間節點,靠後從錯誤日志中得到相對完整的日志資訊,
友盟+應用性能監控平台U-APM為例觸達管道就有郵件、釘釘、企業微信、飛書等等。其中後三者可以通過webhook的方式直接将監控告警發送到群組裡,讓組内的研發同學頭先時間擷取到有效資訊,及時更改異常修複。個人覺得還是蠻好的在個人開發中還是企業應用開發中目前都夠用了。
作為開發者對U-APM的建議:
1.登入一個賬号就可以有一個選擇平台來切換ios/安卓來直接看到對應資料的統計,現在需要來回折騰有點麻煩
2.目前監測統計錯誤異常隻支援IOS跟安卓APP,小程式,H5以及公衆号這些目前不支援
3.如果從監測的異常有錄屏功能就更好了,這樣會直接檢視錄屏回放效果杠杠的~~~~