Flutter異常信息收集-Fabric Crashlytics

對于一個應(yīng)用來說,異常崩潰信息收集至關(guān)重要,接觸過flutter的開發(fā)者應(yīng)該都知道,flutter使用dart開發(fā)大部分異常信息都是導(dǎo)致頁面顯示不正確(頁面顯示錯誤棧信息)或者空白,那flutter如何捕獲這些異常,捕獲異常后又如何收集上報監(jiān)控系統(tǒng),對于原生開發(fā)者來說,F(xiàn)abric Crashlytics(崩潰收集系統(tǒng))大家肯定不陌生,本文講述Flutter如何使用fabric進行異常信息收集監(jiān)控。主要分如下三步:

一 ?Flutter dart端捕獲異常

使用FlutterError.onError 和 runZoned, 在main.dart的main()方法中添加如下代碼:

二 通過channel把異常信息傳到native:

上圖代碼中_reportError()是就是通過channel調(diào)用native方法,把error棧的信息傳的native中,channel具體用法參考flutter platform channel詳解,native端接收到error棧信息后如何上報fabric,請看第三步。

三 fabric收集異常信息

接入過fabric的開發(fā)者了解,fabric的接入及其簡單,調(diào)用SDK的init及set deviceId一些基本信息就ok, 開發(fā)者并不需要主動去上傳錯誤信息,fabric源碼內(nèi)部是通過實現(xiàn)Thread.UncaughtExceptionHandler接口,即自定義?Thread.UncaughtExceptionHandler來實現(xiàn)的,在uncaughtException方法中接收到錯誤信息并進行上報的,?之后把錯誤信息傳遞給默認的Exception處理器(注意這里所說的默認Exception處理器是在fabric源碼初始化方法里通過Thread.getDefaultUncaughtExceptionHandler()獲取的(并不一定是系統(tǒng)的哦)。

對于fabric收集大都是導(dǎo)致應(yīng)用崩潰的錯誤日志,而對于flutter來說大部分異常信息只是頁面上顯示問題,并不會導(dǎo)致應(yīng)用崩潰,我們只是想要向fabric上報異常信息,那要怎么做呢?其實方法很簡單,只要分小三步:

1 、 定義FlutterException(繼承Exception), 并且在應(yīng)用內(nèi)自定義Thread.UncaughtExceptionHandler,命名FlutterExceptionHandler,代碼如下,注意init中的兩行代碼,很關(guān)鍵哦

在uncaughtException中對應(yīng)FlutterException的異常,直接return,這樣就不會往下傳遞到系統(tǒng)Exception處理器了,就可以保證應(yīng)用不崩潰

2、 在fabric調(diào)用init方法之前進行FlutterExceptionHandler init,這樣剛才提到的fabric里的默認Exception處理器就是FlutterExceptionHandler了

3、 在接收到dart端傳過來的errro信息處調(diào)用Thread.getDefaultUncaughtExceptionHandler().uncaughtException(Thread.currentThread(), new FlutterException(exceptionStr))即可。

(另外,說明下如果在第二小步之后沒有其他地方調(diào)用Thread.setDefaultUncaughtExceptionHandler()的情況 這里的第三小步中的Thread.getDefaultUncaughtExceptionHandler() 為fabric sdk里的CrashlyticsUncaughtExceptionHandler )

在dart端制造個錯誤信息,試驗下吧,這樣打開fabric系統(tǒng),就能看到異常信息了

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • android的崩潰很常見,我們往往通過日志收集避免下次更新的重復(fù)出錯。 android的崩潰發(fā)生后通常是...
    WhenMeet閱讀 4,702評論 0 4
  • Android系統(tǒng)碎片化造成應(yīng)用程序崩潰嚴重,在模擬器上運行良好的程序安裝到某款手機上說不定就會出現(xiàn)崩潰的現(xiàn)象。而...
    YoungTa0閱讀 18,071評論 5 20
  • 一. 序 Android系統(tǒng)中,拋出Exception 或者 Error都會導(dǎo)致Crash.進而導(dǎo)致App強制退出...
    Jamin_正宗紅罐辣醬閱讀 3,263評論 1 7
  • 進程和線程 進程 所有運行中的任務(wù)通常對應(yīng)一個進程,當一個程序進入內(nèi)存運行時,即變成一個進程.進程是處于運行過程中...
    勝浩_ae28閱讀 5,260評論 0 23
  • 一、前言 線程池技術(shù)是服務(wù)器端開發(fā)中常用的技術(shù)。不論是直接還是間接,各種服務(wù)器端功能的執(zhí)行總是離不開線程池的調(diào)度。...
    幽瀾先生閱讀 931評論 0 0

友情鏈接更多精彩內(nèi)容