android 程序崩潰crash日志的捕捉


android 程序崩潰crash日志的捕捉

之前在項目開發過程中,一直會遇到程序崩潰了,但是測試組的哥哥們又沒及時的導出日志....
后來在誑群的時候聽別人說起,騰訊有那么一個叫bugly的東西
將其作為第三方jar文件引入其中,並且進行一些簡單的配置即可:程序崩潰的crash日志會自動的上傳到他騰訊那邊給的后台上面,在線查看日志

問題來了:

  • 怎么實現的呢
  • 為什么他們就可以去捕獲那一段日志?
  • 程序不是已經崩潰了嗎?
  • 獲取日志的代碼為啥還可以運行?

原理

搜索到這篇文章Android平台的崩潰捕獲機制及實現
這篇文章來自一個做這方面產品的大牛。下面對其中關於原理的描述做一些引用

Java提供了一個接口給我們,可以完成這些,這就是UncaughtExceptionHandler,Uncaught異常發生時會終止線程,此時,系統便會通知UncaughtExceptionHandler,告訴它被終止的線程以及對應的異常,然后便會調用uncaughtException函數。如果該handler沒有被顯式設置,則會調用對應線程組的默認handler。

原來這玩意是java做的活,是java對其線程出現unCaught異常進行捕獲的處理,和android本身無關

使用的注意點

android應用中必須在Application中調用Thread.setDefaultUncaughtExceptionHandler(UncaughtExceptionHandler);

在java中,可以在任何的線程中調用setDefault方法。但是在android中不行,必須是在application中調用

在Android應用程序中,全局的Application和Activity、Service都同屬於UI主線程,線程名稱默認為“main”。所以,在Application中應該為UI主線程添加UncaughtExceptionHandler,這樣整個程序中的Activity、Service中出現的UncaughtException事件都可以被處理。

如果多次調用setDefaultUncaughtExceptionHandler設置handler,以最后一次為准。

將閃退信息存儲到文件系統中。不能存到SharedPreferences中,因為打開SP需要使用一個新的線程(Android內部實現),而這在UnCaughtExceptionHandler中,這是不被允許的。

Android實現多次閃退清除數據
這篇文章里面的作者描述的是,用一個叫做acra的開源項目,來實現當短時間內程序發生幾次崩潰,則刪除某些數據以滿足對程序的修復。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM