我在網上搜索了一下ANR是什麼。我也研究了這些參考文獻。但是我沒有得到關於Android崩潰的細節。ANR和Android崩潰有什麼區別?
有人能告訴我ANR(Android沒有響應)和Android崩潰之間的區別嗎?
我在網上搜索了一下ANR是什麼。我也研究了這些參考文獻。但是我沒有得到關於Android崩潰的細節。ANR和Android崩潰有什麼區別?
有人能告訴我ANR(Android沒有響應)和Android崩潰之間的區別嗎?
ANR代表甲 pplication Ñ OT ř esponding。
如果您在UI線程上運行需要很長時間(通常爲5秒左右)的進程,則會發生ANR。在此期間,GUI(圖形用戶界面)將被鎖定,這將導致用戶按下的任何內容都不會被執行。約5秒後,如果線程仍然沒有恢復,那麼會顯示一個ANR對話框,通知用戶應用程序沒有響應,並且會讓用戶選擇等待,希望應用程序將最終恢復,或強制關閉應用程序。
崩潰是當應用程序內的異常已被拋出尚未處理。例如,如果嘗試設置EditText組件的文本,但EditText爲null,並且沒有try catch語句來捕獲應用程序崩潰並強制關閉的異常。用戶不會看到什麼導致了崩潰,他們會顯示一個對話,告訴該應用程序已經意外強制關閉,並會給他們發送錯誤報告的選項。在這個例子中,如果你要查看bug報告,你會看到由java.lang.NullPointerException引起的錯誤。
希望這會有所幫助。
ANR(甲 pplication Ñ OT ř esponding)是由於處理long running task in Main Thread
(UI線程)。如果主線程停止時間超過5秒你ANR。
崩潰歸因於exception and error
類似於Nullpoint,classNotfound,類型轉換,分析錯誤等。ANR也會導致應用程序崩潰。
注意:不要將運行在UI線程
參考ANR
ANR爲前長時間運行的任務:如果你是在UI線程下載龐大的數據量,如內存等不足MENY其他的可能性就會到來。 。可能它會導致android崩潰,我們不能說兩者都是一樣的其他
ANR表示應用程序不響應,這意味着您的應用程序不會在UI線程上註冊事件,因爲長時間運行的操作在那裏執行
ANR: It is called when anything your application is doing in the UI thread that
takes a long time to complete (5 sec approx)
參考:ANR
Crash: It is called when your Application gets some Error or Exception raised by the DVM
ANR也5秒內引起副
ANR代表應用程序沒有響應,並在長期操作發生到主線程發生了......
崩潰是由於異常和錯誤像Nullpoint,
應用無響應(ANR):
ANR將在下列條件下出現:
在5秒內響應輸入事件(如按鍵或屏幕觸摸)
廣播接收器尚未在10秒內完成執行。
如何避免ANR?
創建長時間運行的操作,例如數據庫操作,網絡運營等
不同的工作線程強化響應速度: 在Android應用通常情況下,100〜200毫秒超出其用戶的門檻會覺得應用程序很慢。以下是我們可以通過其顯示應用程序更敏捷的提示。
無論您何時做任何後臺工作並且用戶正在等待響應,都會顯示進度對話框。
對於遊戲特別是在工作線程中進行移動計算。
崩潰: 崩潰是未處理狀態到應用程序中,它會強行關閉我們的應用程序。一些崩潰的例子就像空指針異常,非法狀態異常等。
ANR代表應用程序沒有響應。
這可能是由於許多原因造成的,例如應用程序阻塞UI線程上的某些I/O操作,因此係統無法處理傳入的用戶輸入事件。或者,應用程序可能花費太多時間來構建精細的內存結構或計算UI線程中的下一步。
阻止主線程不會導致崩潰,但會顯示一個彈出窗口讓用戶在5秒後終止應用程序。
但是對於崩潰,主要原因是人爲錯誤。 大部分時間的應用程序崩潰是因爲通過人類
人爲錯誤
缺乏測試
空指針異常的
出現OutofMemory
實施例製成的編碼/設計錯誤的:
這是常見的程序員會引用一個不存在的對象或變量,基本上會創建一個空指針錯誤。
如果您的連接不好,也可能導致應用程序崩潰。該應用程序也可能有內存管理問題。
請參閱我的回答,瞭解可能導致崩潰的Android特定異常類型。
[ANR和崩潰不同] [1] Android應用程序通常在單個線程默認「UI線程」或 「主線程」完全運行。這意味着您的應用程序在UI線程中執行的任何操作都需要很長時間才能觸發ANR對話框,因爲您的應用程序沒有給自己處理輸入事件或意圖廣播的機會。
ANR:基本上是由於主線程上長時間運行的任務。
有一些常見的模式看診斷ANR數時:
以下技術可以幫助您找出哪些原因導致您的ANR。
CRASH:
原因crashs可以有很多。有些原因是顯而易見的,比如檢查null值或空字符串,但其他人則比較含蓄,像傳遞無效參數的API,甚至複雜的多線程交互
ANR和崩潰的例子:
這個問題已經有一個被接受的答案,但我增加了兩個簡單的例子來更好地理解ANR和崩潰。
ANR:
// this will produce an ANR on your app
int i = 0;
while(true) {
i++;
}
崩潰:
// this will crash your app : will produce java.lang.ArithmeticException
int value = 5, i = 0;
int result = value/i;
如果您通過JNI運行C++代碼並在那裏發生錯誤,那麼應用程序進程只會在用戶沒有對話框的情況下崩潰。至少它曾經。 – juunas