首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Android ANR traces.txt 分析無頭緒:定位主線程卡死點

     編輯:程式設計疑難解答

ANR 日誌關鍵信息


ANR in com.dingdingpai.paybox (NearByPaySucAct)
Reason: Input dispatching timed out
CPU usage: 86% 28531/com.dingdingpai.paybox (82% user + 3.9% kernel)

traces.txt 關鍵線程

主線程 (tid=28531) 狀態 `VMWAIT`,堆疊:


"Thread-1633" prio=5 tid=1 VMWAIT
...
at dalvik.system.NativeStart.run(Native Method)

**但未見 Java 代碼堆疊**,說明主線程可能在 **JNI 層阻塞** 或 **GC/VM 操作**。

可疑點:大量 LoadingDialogView$UpdataThread


"Thread-1623" ... at android.os.MessageQueue.enqueueMessage ...
at com.zftpay.paybox.widget.customsialog.LoadingDialogView$UpdataThread.run(LoadingDialogView.java:112)
  • 多個 `UpdataThread` 同時向主線程 `Handler` 發送消息 (`sendEmptyMessage`),導致 `MessageQueue` 鎖競爭、主線程處理不過來。
  • 第 112 行可能在循環高頻發送 UI 更新消息。

排查建議

  1. 檢查 `LoadingDialogView.java:112` 附近代碼,是否在循環中 `handler.sendEmptyMessage()` 且無節流。
  2. 合併 UI 更新、降低頻率 (如 200ms 一次)、或用 `postDelayed` 替換循環+sleep。
  3. 確保 Dialog 關閉時停止線程 (`interrupt` + 標志位)。
  4. 使用 `StrictMode`、Android Profiler 監控主線程阻塞。

圖片說明

ANR 分析示意圖

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved