Android 應用崩潰有兩種
- 一種是java的崩潰 咱們能夠經過Thread.setuncaughtexcetpionhandler來設置崩潰捕捉
- 第二種就是native崩潰 navtive 崩潰流程
native 崩潰 捕捉工具 待補充java
應對崩潰的處理
與破案相同,咱們須要儘量的收集到案發現場的信息,這有助於咱們來破案linux
- 崩潰的信息:
- 進程名,線程名:有助於判斷崩潰發生的場景,是否是主線程
- 崩潰的類型:native崩潰?java崩潰?anr?
- 發生崩潰時的關鍵線程和當前線程的堆棧
- 系統信息:
- logcat 日誌
- 設備機型,系統,廠商,cpu,api,linux版本等等
- 設備root?多開?
- 內存狀態:
- 當前設備的內存狀態
- 當前應用的內存狀態
- 虛擬內存狀態
- 其餘狀況:
- 業務操做邏輯:
對應的操做手段
- 確認崩潰的類型是java崩潰仍是native崩潰仍是anr?
- anr:先看主線程的堆棧,是否鎖引發的 再看anr的日誌,是不是io問題,仍是gc問題
- java:查看java堆棧,若是是oom等問題能夠去查看內存使用狀況,top信息等
- logcat:能夠獲取到手機的狀態,好比am_anr,am_kill, gc等消息
- 嘗試復現
- 尋找可能出現的問題嘗試解決,添加防護性的代碼
- 嘗試規避問題
- 嘗試hook 解決 android7的toast報錯問題