Android 開發高手進階--崩潰優化

Android 應用崩潰有兩種

  1. 一種是java的崩潰 咱們能夠經過Thread.setuncaughtexcetpionhandler來設置崩潰捕捉
  2. 第二種就是native崩潰 navtive 崩潰流程

native 崩潰 捕捉工具 待補充java

應對崩潰的處理

與破案相同,咱們須要儘量的收集到案發現場的信息,這有助於咱們來破案linux

  • 崩潰的信息:
    • 進程名,線程名:有助於判斷崩潰發生的場景,是否是主線程
    • 崩潰的類型:native崩潰?java崩潰?anr?
    • 發生崩潰時的關鍵線程和當前線程的堆棧
  • 系統信息:
    • logcat 日誌
    • 設備機型,系統,廠商,cpu,api,linux版本等等
    • 設備root?多開?
  • 內存狀態:
    • 當前設備的內存狀態
    • 當前應用的內存狀態
    • 虛擬內存狀態
  • 其餘狀況:
    • 文件句柄泄漏?
    • 當前應用開啓的線程數
    • jni?
  • 業務操做邏輯:
    • 操做過程
    • 崩潰現場
    • 其餘自定義
對應的操做手段
  • 確認崩潰的類型是java崩潰仍是native崩潰仍是anr?
    • anr:先看主線程的堆棧,是否鎖引發的 再看anr的日誌,是不是io問題,仍是gc問題
    • java:查看java堆棧,若是是oom等問題能夠去查看內存使用狀況,top信息等
  • logcat:能夠獲取到手機的狀態,好比am_anr,am_kill, gc等消息
  • 嘗試復現
  • 尋找可能出現的問題嘗試解決,添加防護性的代碼
  • 嘗試規避問題
  • 嘗試hook 解決 android7的toast報錯問題
相關文章
相關標籤/搜索