如何分析Android ANR問題?



ANR(Application Not Responding)是指應用程式無法回應用戶操作,通常是因為主線程被阻塞,造成應用程式失去了響應能力。在 Android 開發中,ANR 通常是由長時間的 IO 操作、低效的網路訪問、死循環、死鎖等問題所引起的。

以下是一些分析 Android ANR 問題的方法:

查看 ANR 日誌:當應用程式出現 ANR 問題時,系統會生成一個 ANR 日誌,其中包含了造成 ANR 的原因、發生時間、應用程式名稱等資訊。開發人員可以查看 ANR 日誌來了解問題的根本原因。


使用 systrace 工具:systrace 是 Android SDK 中一個用於分析系統效能的工具,可以用來分析 CPU、GPU、網路等方面的效能問題。開發人員可以使用 systrace 工具來檢查應用程式是否因為佔用過多的資源而導致 ANR。


使用 Profiler 工具:Profiler 是 Android Studio 中的一個效能分析工具,可以用來分析應用程式的 CPU、記憶體、網路等方面的效能問題。開發人員可以使用 Profiler 工具來檢查應用程式的效能瓶頸,並優化應用程式的效能。


檢查應用程式代碼:開發人員可以檢查應用程式代碼,尋找可能造成 ANR 的問題。例如,長時間的 IO 操作應該在後台執行,不應該在主線程中執行。低效的網路訪問應該使用異步方式執行,避免阻塞主線程。


測試應用程式:開發人員可以進行一系列的測試,測試應用程式在各種情況下的反應速度和效能。例如,模擬網路緩慢的情況,測試應用程式的反應速度。這樣可以幫助開發人員發現可能會導致 ANR 的問題,並進行修復。

總之,要分析 Android ANR 的問題,需要進行綜合分析



===

2012: How to trace ANR problem !


What Triggers ANR?
http://developer.android.com/guide/practices/design/responsiveness.html
In Android, application responsiveness is monitored by the Activity Manager and Window Manager system services. Android will display the ANR dialog for a particular application when it detects one of the following conditions:No response to an input event (e.g. key press, screen touch) within 5 seconds
A BroadcastReceiver hasn't finished executing within 10 seconds



How to investigate an ANR http://stackoverflow.com/questions/704311/android-how-do-i-investigate-an-anr



An ANR happens when some long operation takes place in the "main" thread. This is the event loop thread, and if it is busy, Android cannot process any further GUI events in the application, and thus throws up an ANR dialog.
Now, in the trace you posted, the main thread seems to be doing fine, there is no problem. It is idling in the MessageQueue, waiting for another message to come in. In your case the ANR was likely a longer operation, rather than something that blocked the thread permanently, so the event thread recovered after the operation finished, and your trace went through after the ANR.
Detecting where ANRs happen is easy if it is a permanent block (deadlock acquiring some locks for instance), but harder if it's just a temporary delay. First, go over your code and look for vunerable spots and long running operations. Examples may include using sockets, locks, thread sleeps, and other blocking operations from within the event thread. You should make sure these all happen in separate threads. If nothing seems the problem, use DDMS and enable the thread view. This shows all the threads in your application similar to the trace you have. Reproduce the ANR, and refresh the main thread at the same time. That should show you precisely whats going on at the time of the ANR

--

中文相關討論


留言

搜尋

本月熱門文章

中國國民黨政治人物參與中國共產黨統戰學習?

日本旅行 去東京可以在哪邊買羽球相關用品?WEMBLEY/WINDSOR/梭家/Victoria/Alpen TOKYO/

[台海危機] 中國軍機擾台問題 2023/09/17-18 單日破百架次飛機 創新高

[台海危機] 2024/10/15 聯合利劍—2024B「153共機34共艦」圍台破單日紀錄 東南空域配合遼寧艦聯演

[社會觀察] 一生順遂與命途乖舛

堪比林益世李朝卿的前台北市長柯文哲

台灣只有兩種小孩

水電行介紹---台北市北投區的實踐街上的義憶水電行----很艋舺的台詞.

水電行介紹---台北市南港區研究院路二段30號的志興水電行---是水電行也是水電材料行

金融犯罪調查師 車禍身亡 疑點重重 金融正義的代價:陳梅慧離奇車禍死亡背後的疑雲

Agoda

熱門文章

[社會觀察] 一生順遂與命途乖舛

中華民國2024 總統、副總統選舉公告發布 連署參選門檻28萬9667人 可以推薦候選人的政黨包括民進黨、國民黨、民眾黨和時力

[FAANG面試] 如何準備Google Technical Program Manager (TPM) 面試

關於中國:202X年

[HMD Global] Nokia 2020 新手機發布 首款 5G 手機 Nokia 8.3 預計夏季開賣 !

[音樂] 霖霖 新單曲:給你了

[表特][Passion Sisters] 中信兄弟PS女孩 浮誇甜心 凱蒂 炸裂全場~ 小許瑋甯

[棒球] 2023 台灣大賽G5 威能帝13K飆破紀錄 猿3轟搶聽牌優勢