欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android崩潰日志收集和保存解析

 更新時間:2023年02月27日 14:56:02   作者:似曾相識2022  
這篇文章主要為大家介紹了Android崩潰日志收集和保存解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

面試

記得很久很久以前的一次面試中被面試官問:

面試官:你的崩潰日志是怎么收集的?
我答:集成騰訊的Bugly收集。
面試官:如果不用第三方呢?
我:好像有個什么異常的handler,具體想不起來了

那么今天我們就來聊聊關于崩了日志收集的以上兩種方式UncaughtExceptionHandler和Bugly

UncaughtExceptionHandler

  • UncaughtExceptionHandler UncaughtExceptionHandler類是java1.5里新增的Thread類里面的一個函數式接口類的,接口處理器時調用線程突然終止,由于未捕獲到異常。當一個線程要終止由于未捕獲到異常的Java虛擬機將查詢線程其使用的UncaughtExceptionHandler.getUncaughtExceptionHandler,將調用處理程序的uncaughtException方法,將線程和異常作為參數。

首先我們需要編寫該接口實現類,重寫uncaughtException方法,一旦應用發(fā)生異常該方法就會觸發(fā),所以我們的業(yè)務邏輯就必須在這個接口中實現。

override fun uncaughtException(t: Thread, e: Throwable) {
        //崩潰信息
        val writer = StringWriter()
        val printWriter = PrintWriter(writer)
        e.printStackTrace(printWriter)
        var cause: Throwable? = e.cause
        while (cause != null) {
            cause.printStackTrace(printWriter)
            cause = cause.cause
        }
        printWriter.close()
        val result: String = writer.toString()
        ......
}

通過入參StringWriter的PrintWriter獲取到Throwable信息,再將StringWriter的信息打印出來就是應用的崩潰信息,獲取過程雖稍顯復雜但使用還是極其簡單。之后就是將日志保存在本地和上傳服務器的過程了。

val fos = FileOutputStream(path + fileName)
fos.write(sb.toString().toByteArray())

既然有儲存那么就一定要有刪除功能,否則一旦數據量大了后手機內存就不夠用了,我們設置一個清除15天前數據。

private fun deleteFile() {
    val file = File(path)
    val nowDate = Date()
    if (file.exists() && file.listFiles().isNotEmpty()) {
        for (item in file.listFiles()) {
            if (item.isFile) {
                val split = item.name.split(".")
                if (split.isNotEmpty()) {
                    val old = split[0].substring(6, split[0].length)//截取時間戳
                    val oldDate = formatter.parse(old)
                    val diff = nowDate.time - oldDate.time
                    val days = diff / (1000 * 60 * 60 * 24)
                    val minutes = (diff % (1000 * 60 * 60)) / (1000 * 60)
                    if (days > 15) {
                        item.delete()
                    }
                }
            }
        }
    }
}

最后,當然是需要初始化這個工具類,盡可能在應用啟動時初始化。

override fun onCreate() {
    super.onCreate()
    CrashHandler.instance.init(this)
}

如需保存到服務器則保存本地的同時即可保存到服務器。這里分享一個當時遇到的問題,debug和realase兩個版本中一個可以在保存目錄找到日志,一個根本找不到該目錄。經過反復對比和查找資料才發(fā)現,原來是cacheDir和externalCacheDir的區(qū)別,哈哈哈,著實給我整懵逼了。

Bugly

Bugly

為移動開發(fā)者提供專業(yè)的異常上報和運營統(tǒng)計,幫助開發(fā)者快速發(fā)現并解決異常,同時掌握產品運營動態(tài),及時跟進用戶反饋。

Bugly是一款免費的三方庫,提供崩潰日志和應用更新、運營統(tǒng)計等功能,去年應用更新功能(全量更新)被割掉了,非常遺憾,但崩潰日志還能正常使用并且做的也很不錯。相當于它提供后臺存儲,對于一些NDK之類的底層報錯和代碼混淆可以通過上傳符號表查看報錯信息。

在build.gradle文件中添加配置和依賴

android { 
   defaultConfig { 
      // 設置支持的SO庫架構 abiFilters 'armeabi' //, 'x86', 'armeabi-v7a', 'x86_64', 
      ndk { 
        'arm64-v8a' 
      } 
   } 
} 
//其中l(wèi)atest.release指代最新Bugly SDK版本號,也可以指定明確的版本號,例如4.0.3 }
dependencies { implementation 'com.tencent.bugly:crashreport:latest.release' 

盡可能早的初始化

CrashReport.initCrashReport(getApplicationContext(), "注冊時申請的APPID", false);

之后出現應用異常即可在賬號內查看和處理,可以說功能還是比較齊全的。

總結

其實現在網上很多關于崩潰日志的庫,啥蒲公英、加固類Sdk都有,最終還是得根據項目情況選擇一款條件合適得工具。UncaughtExceptionHandler使用也簡單,但需要開發(fā)者自己使用代碼做好日志整理、收集、上傳功能,如果涉及上傳就得需要后端配合,無疑又增加了人員維護,好處就是自己服務器控制數據。三方庫使用就更簡單了,連后端都省了,但因此也帶來了弊端,始終數據在別人服務器中,這個不可控,如涉及隱私可能也不會選擇它。

以上就是Android崩潰日志收集和保存解析的詳細內容,更多關于Android崩潰日志收集保存的資料請關注腳本之家其它相關文章!

相關文章

  • Android高效加載大圖、多圖解決方案 有效避免程序OOM

    Android高效加載大圖、多圖解決方案 有效避免程序OOM

    這篇文章主要為大家詳細介紹了Android高效加載大圖、多圖解決方案,有效避免程序OOM,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • Android 重寫ViewGroup 分析onMeasure()和onLayout()方法

    Android 重寫ViewGroup 分析onMeasure()和onLayout()方法

    這篇文章主要介紹了Android 重寫ViewGroup 分析onMeasure()和onLayout()方法的相關資料,需要的朋友可以參考下
    2017-06-06
  • Android AIDL中Map參數傳遞的問題詳解

    Android AIDL中Map參數傳遞的問題詳解

    這篇文章主要給大家介紹了關于Android AIDL中Map參數傳遞問題的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友下面來一起看看吧。
    2017-12-12
  • Android把svg圖片轉為jpg保存到相冊圖庫

    Android把svg圖片轉為jpg保存到相冊圖庫

    這篇文章主要為大家詳細介紹了Android把svg圖片轉為jpg保存到相冊圖庫,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • Android實現氣泡布局/彈窗效果 氣泡尖角方向及偏移量可控

    Android實現氣泡布局/彈窗效果 氣泡尖角方向及偏移量可控

    這篇文章主要為大家詳細介紹了Android實現氣泡布局/彈窗效果,可控制氣泡尖角方向及偏移量,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-08-08
  • 多面分析HarmonyOS與Android的特點

    多面分析HarmonyOS與Android的特點

    請教身邊的大佬們,公司的CTO、中臺部門的總監(jiān)、老東家數十年行業(yè)經驗的老架構、以及在中科院讀研究生的大學老室友、技術圈的網友等等,他們都給出了自己獨特的看法,讓我從多方面更好的去了解到了大家對鴻蒙的認識
    2021-08-08
  • Android Studio 通過登錄功能介紹SQLite數據庫的使用流程

    Android Studio 通過登錄功能介紹SQLite數據庫的使用流程

    SQLite是一款輕型的數據庫,是遵守ACID的關系型數據庫管理系統(tǒng),它包含在一個相對小的C庫中。這篇文章主要介紹了Android Studio 通過登錄功能介紹SQLite數據庫的使用流程,需要的朋友可以參考下
    2018-09-09
  • Android實現伴奏錄音合成MP3

    Android實現伴奏錄音合成MP3

    這篇文章主要為大家詳細介紹了Android實現伴奏錄音合成MP3,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • Android SurfaceView基礎用法詳解

    Android SurfaceView基礎用法詳解

    這篇文章主要介紹了Android SurfaceView基礎用法詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-08-08
  • Android學習筆記——Menu介紹(二)

    Android學習筆記——Menu介紹(二)

    這次將繼續(xù)上一篇文章沒有講完的Menu的學習,上下文菜單(Context menu)和彈出菜單(Popup menu)
    2014-10-10

最新評論