Android ANR 日志分析定位

ANR 是 Android 應用程序中的 "Application Not Responding" 的縮寫,中文意思是 "應用程序無響應"。這是當應用程序在 Android 系統上運行時,由于某種原因不能及時響應用戶輸入事件或執行一個操作,導致界面無法更新,系統彈出對話框通知用戶應用程序未響應,給用戶提供了等待它響應或是直接關閉的選項。

當應用程序發生ANR 時,Android 系統會在設備的日志文件中記錄相關信息,這個文件包含了在 ANR 發生時的各個線程的調用堆棧(路徑:/data/anr/traces.txt)

但是 /data/anr/ 路徑只有 root 權限才能夠進行訪問,在非 root 權限的情況下需要 adb 命令導出相關的日志文件后篩選查看 ANR 的日志信息


舉個例子,故意寫個 ANR:

class MainActivity : AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)findViewById<Button>(R.id.btn).setOnClickListener {Thread.sleep(100000)}}
}

連續點擊按鈕,等待系統 ANR 的彈框,點擊確認。


?將設備的診斷信息日志導出到電腦上(路徑默認是adb的路徑):

adb bugreport

想到電腦上的指定路徑也可以配置:

adb bugreport D:\log.zip

?把導出的 zip 包解壓縮后打開:

?日志文件比較多,ANR 所在的文件目錄在:\FS\data\anr

這里面就包含了每一次發生 ANR 時的日志信息,日期時間都能看到

找到對應時間點的 ANR 日志用 txt 打開

里面的信息非常多,使用 Ctrl + F?搜索主線程相關的信息: "main" prio=5 tid=1

這樣子就能夠快速定位到主線程相關的信息了


首先跟在主線程后面的是狀態,常見的有這幾種狀態:

Native:正在執行 JNI 本地函數(主線程空閑時執行的 nativePollOnce 也屬于此)

Runnable:線程正在 Java 虛擬機中執行(可能正在進行耗時操作)

Sleeping:線程正在睡眠(通常是調用了 Thread.sleep() )

Blocked:線程被阻塞(等待監視器鎖的釋放)


在我舉的例子中,主線程就是處于?Sleeping 狀態,我們就可以往下看日志信息找到調用的堆棧,從而定位到代碼進行具體的優化


應用在線上的數據中里,ANR 并不完全由應用產生,也有可能由系統原因導致(比如內存不足、其他應用CPU搶占等),即便如此,我們還是需要盡量避免在應用層產生?ANR

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/713215.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/713215.shtml
英文地址,請注明出處:http://en.pswp.cn/news/713215.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Kubernetes(k8s第二部分)

資源清單相當于劇本 什么是資源&#xff1a; k8s中所有的內容都抽象為資源&#xff0c;資源實例化后&#xff0c;叫做對象。 1.K8S中的資源 集群資源分類 名稱空間級別&#xff1a; kubeadm k8s kube-system kubectl get pod -n default 工作負載型資源&#xff0c;&a…

指針篇章-(1)

指針&#xff08;1&#xff09;學習流程 —————————————————————————————————————————————————————————————————————————————————————————————————————————————…

Linux:使用nslookup和dig查詢DNS記錄信息

nslookup nslookup&#xff08;Name Server Lookup&#xff09;用于從 DNS 服務器查詢域名、IP 或其他 DNS 記錄信息 示例 查詢域名信息 $ nslookup baidu.comServer: 114.114.114.114 Address: 114.114.114.114#53Non-authoritative answer: Name: baidu.com Add…

springcloud項目,無法在Sentinel Dashboard查看到服務的訪問監控信息【解決方法】

1.問題場景 因為warehouse子項目的前端未開發&#xff0c;所以只能通過postman測試接口訪問&#xff1b; 2.解決方法 package org.sharetek.common.security.config;import cn.dev33.satoken.SaManager; import cn.dev33.satoken.filter.SaServletFilter; import cn.dev33.sat…

【Django】執行查詢—檢索對象(二)

主鍵 (pk) 查詢快捷方式 pk查詢等同于通過模型的 primary key 進行過濾&#xff0c;直接上例子&#xff0c;下面三個語句是等效的。 >>> Blog.objects.get(id__exact14) # Explicit form >>> Blog.objects.get(id14) # __exact is implied >>> …

構筑未來商業智能——數據中臺的戰略視角_光點科技

隨著數字化時代的加速到來&#xff0c;企業對于數據的依賴程度日益增強。數據中臺&#xff0c;作為連接數據與商業決策的關鍵樞紐&#xff0c;已成為企業打造持久競爭優勢的戰略選擇。本文將從戰略的高度&#xff0c;解析數據中臺如何幫助企業捕捉數據紅利&#xff0c;推進業務…

NXP實戰筆記(十一):32K3xx基于RTD-SDK在S32DS上配置LPSPI(同步、異步、DMA、主機、從機、中斷、輪詢)

目錄 1、概述 2、RTD-SDK配置 2.1、配置目標 2.2、主、從機引腳配置 2.3、時鐘配置 2.4、LPSPI配置 2.5、中斷配置 2.6、DMA配置(使用DMA才會配置) 2、dma Logic Instance 2.7、RM配置(使用DMA的情況下必須配置此選項) 3、代碼實現 1、概述 S32K3_低功耗LPSPI輪詢…

第七十六周周報

學習目標&#xff1a; 論文 實驗 學習時間&#xff1a; 2024.2.24-2024.3.1 學習產出&#xff1a; 論文 仔細看了論文"All are Worth Words: A ViT Backbone for Diffusion Models"&#xff0c;”DiffiT: Diffusion Vision Transformers for Image Generation…

備戰藍橋杯Day19 - 堆排序基礎知識

一、每日一題 - 填充 詳細題解 s input() # 輸入字符串 n len(s) # 定義字符的長度 judge ["00", "11", "0?", "1?", "?0", "?1", "??"] # 把所有的情況一一列舉出來 count 0 # 設置計數…

性能優化篇(四) GPU Instancing

使用GPU Instancing可以在一個Draw Call中同時渲染多個相同或類似的物體&#xff0c;從而減少CPU和GPU的開銷。 官方文檔&#xff1a;https://docs.unity3d.com/Manual/GPUInstancing.html 啟用GPU Instancing&#xff0c;我們可以選中一個材質&#xff0c;然后在Inspector窗口…

PostgreSQL教程(二十一):服務器管理(三)之服務器設置和操作

本章討論如何設置和運行數據庫服務器&#xff0c;以及它與操作系統的交互。 一、PostgreSQL用戶賬戶 和對外部世界可訪問的任何服務器守護進程一樣&#xff0c;我們也建議在一個獨立的用戶賬戶下運行PostgreSQL。這個用戶賬戶應該只擁有被該服務器管理的數據&#xff0c;并且…

埃隆·馬斯克對OpenAI提起訴訟

埃隆馬斯克對OpenAI提起訴訟&#xff0c;理由是AI安全威脅 馬斯克指責&#xff0c;自從公司將其開發的人工通用智能技術&#xff08;AGI&#xff09;以閉源形式交給微軟后&#xff0c;OpenAI已經失去了其“開放”的本質。 埃隆馬斯克在周四提交的一項訴訟中聲稱&#xff0c;薩姆…

Ubuntu22.04下安裝Spark2.4.0(Local模式)

一、版本信息 虛擬機產品&#xff1a;VMware Workstation 17 Pro 虛擬機版本&#xff1a;17.0.0 build-20800274 ISO映像文件&#xff1a;ubuntukylin-22.04-pro-amd64.iso Hadoop版本&#xff1a;Hadoop 3.1.3 JDK版本&#xff1a;Java JDK 1.8 Spark版本&#xff1a;S…

[SUCTF 2019]EasyWeb --不會編程的崽

個人認為&#xff0c;這題還算有些東西。先來看源碼 <?php function get_the_flag(){// webadmin will remove your upload file every 20 min!!!! $userdir "upload/tmp_".md5($_SERVER[REMOTE_ADDR]);if(!file_exists($userdir)){mkdir($userdir);}if(!empty…

Slurm作業系統

1、什么是計算機集群 計算機集群是由多臺獨立的計算機&#xff08;節點&#xff09;通過網絡連接在一起&#xff0c;以共同完成任務的一種計算機系統結構。集群系統旨在提高性能、可用性和可擴展性。以下是計算機集群的一般結構和組成要素&#xff1a; 節點&#xff08;Nodes&…

android Service 與 activity 通信 并不斷傳數據

注&#xff1a;這只是個Demo 以下載為案例&#xff0c;實現開啟下載&#xff0c;暫停下載&#xff0c;下載進度不斷發送給activity class DownloadService : Service() {override fun onBind(intent: Intent?): IBinder? {return MyBinder()}inner class MyBinder : Binder…

分布式任務調度平臺XXL-JOB安裝及使用

簡介 XXL-JOB是一個分布式任務調度平臺&#xff0c;其核心設計目標是開發迅速、學習簡單、輕量級、易擴展。現已開放源代碼并接入多家公司線上產品線&#xff0c;開箱即用。 源碼github地址 源碼gitee地址 中文文檔地址 中央倉庫地址 <!-- http://repo1.maven.org/ma…

云原生團隊如何實現加量不加價

隨著云原生技術的快速發展&#xff0c;越來越多的業務實現了上云&#xff0c;云原生團隊在工作量增大的同時也隨之變成了所有問題對接的入口&#xff0c;如何承擔這個保姆的角色成為了一道難題&#xff0c;故障的定界和問題證據的交接更是讓人頭疼的問題。在這種情況下需要有工…

Python Web開發記錄 Day5:jQuery(JavaScript庫)

名人說&#xff1a;莫道桑榆晚&#xff0c;為霞尚滿天。——劉禹錫&#xff08;劉夢得&#xff0c;詩豪&#xff09; 創作者&#xff1a;Code_流蘇(CSDN)&#xff08;一個喜歡古詩詞和編程的Coder&#x1f60a;&#xff09; 目錄 五、jQuery1、jQuery-選擇器和菜單案例①快速上…

水經微圖Web版1.6.0發布

讓每一個人都有自己的地圖&#xff01; 水經微圖&#xff08;簡稱“微圖”&#xff09;新版已上線&#xff0c;在該版本中主要新增了點線面圖層分組樣式設置、圖層排序并按序繪制、KML支持矢量符號的存儲、KML支持態勢標繪要素存儲和新增歷史地圖文本樣式等。 現在&#xff0…