ANR 以及如何定位是前端問題還是後台問題?

2022-09-06 03:54:07 字數 3397 閱讀 5528

以及如何定位是前端問題還是後台問題

1.anr錯誤定位——如果開發機器上出現anr問題時,系統會生成乙個traces.txt的檔案放在/data/anr下,最新的anr資訊在最開始部分。

通過adb命令將其匯出到本地,輸入以下字元:$adb pull data/anr/traces.txt .

2.供選的優化anr問題的方式:

1)為了執行乙個長時間的耗時操作而建立乙個工作執行緒最方便高效的方式是使用asynctask,只需要繼承asynctask並實現doinbackground()方法來執行任務即可。為了把任務執行的進度呈現給使用者,你可以執行publishprogress()方法,這個方法會觸發onprogressupdate()的**方法。在onprogressupdate()的**方法中(它執行在ui執行緒),你可以執行通知使用者進度的操作

2)如果你實現了thread或者handlerthread,請確保你的ui執行緒不會因為等待工作執行緒的某個任務而去執行thread.wait()或者thread.sleep()。ui執行緒不應該去等待工作執行緒完成某個任務,你的ui執行緒應該提供乙個handler給其他工作執行緒,這樣工作執行緒能夠通過這個handler在任務結束的時候通知ui執行緒。例如:繼承thread類

)開發在日常的開發過程中使用thread或者handlerthread,可以嘗試呼叫process.setthreadpriority(process.thread_priority_background)設定較低的優先順序,否則仍然會降低程式響應,因為預設thread的優先順序和主線程相同。

4)activity的oncreate和onresume**中盡量避免耗時的**,應該盡可能的做比較少的事情,其實,任何執行在ui執行緒中的方法都應該盡可能簡短快速。類似網路或者db操作等可能長時間執行的操作,或者是類似調整bitmap大小等需要長時間計算的操作,都應該執行在工作執行緒中。

5)broadcastreceiver中onreceive**也要儘量減少耗時。如果必須在onreceive方法中執行耗時操作,建議使用intentservice進行處理,intentservice集開啟執行緒和自動關閉服務兩種功能於一身,本身非常靈活。

輔助處理anr問題的工具

1.traceview - 系統效能分析工具,用於定位應用**中的耗時操作

2.systrace - android4.1新增的應用效能資料取樣和分析工具)

進入完成的功能頁面摁f12或點選滑鼠右鍵檢查進入控制台看console資訊是否有紅色報錯

在network檢視狀態碼

100 (繼續)

101 (轉換協議)

101狀態碼是指伺服器將按照其上的頭資訊變為乙個不同的協議

200 (ok/正常)

200意思是一切正常。一般用於相應get和post請求

201 (已建立)

201表示伺服器在請求的響應中建立了新文件;應在定位頭資訊中給出它的url。

202 接受

202告訴客戶端請求正在被執行,但還沒有處理完。

203表示文件被正常的返回,但是由於正在使用的是文件副本所以某些響應頭資訊可能不正確。

204 (sc_no_content)確保瀏覽器繼續顯示先前的文件。

205 (reset content/重置內容)

重置內容205 (sc_reset_content)的意思是雖然沒有新文件但瀏覽器要重置文件顯示。這個狀態碼用於強迫瀏覽器清除表單域。這是 http 1.1中新加入的。

206 區域性內容

206是在伺服器完成了乙個包含range頭資訊的區域性請求時被傳送的。

300 表示被請求的文件可以在多個地方找到,並將在返回的文件中列出來。

301狀態是指所請求的文件在別的地方;文件新的url會在定位響應頭資訊中給出。

302 狀態碼302是非常有用的因為瀏覽器自動連線在定為響應頭資訊中給出的新url。

303這個狀態碼和 301、302 相似,只是如果最初的請求是 post,那麼新文件(在定位頭資訊中給出)藥用 get 找回。這個狀態碼是新加入 http 1.1中的。

304 為修正

305表示所請求的文件要通過定位頭資訊中的**伺服器獲得。

307臨時重定向瀏覽器處理307狀態的規則與302相同。

400指出客戶端請求中的語法錯誤。

401 (unauthorized/未授權)

403意思是除非擁有授權否則伺服器拒絕提供所請求的資源。

404 (not found/未找到)

404狀態每個網路程式設計師可能都遇到過,他告訴客戶端所給的位址無法找到任何資源。

405指出請求方法(get, post, head, put, delete, 等)對某些特定的資源不允許使用。

406表示請求資源的mime型別與客戶端中accept頭資訊中指定的型別不一致。

407與401狀態有些相似,只是這個狀態用於**伺服器。

408是指服務端等待客戶端傳送請求的時間過長。

409狀態常被用於試圖上傳版本不正確的檔案。

410是在指導文件已被移走的情況下使用,而404則用於未知原因的無法訪問。

411表示伺服器不能處理請求除非客戶端傳送content-length頭資訊指出傳送給伺服器的資料的大小。

412狀態指出請求頭資訊中的某些先決條件是錯誤的。

413告訴客戶端現在所請求的文件比伺服器現在想要處理的要大。

414狀態用於在uri過長的情況時。

415意味著請求所帶的附件的格式型別伺服器不知道如何處理。

416表示客戶端包含了乙個伺服器無法滿足的range頭資訊的請求。

500是常用的「伺服器錯誤」狀態。

501狀態告訴客戶端伺服器不支援請求中要求的功能

502該狀態指出接收伺服器接收到遠端伺服器的錯誤響應。

503 (service un**ailable/服務無法獲得)

狀態碼503 (sc_service_un**ailable)表示伺服器由於在維護或已經超載而無法響應。例如,如果某些執行緒或資料庫連線池已經沒有空閒則servlet會返回這個頭資訊。伺服器可提供乙個retry-after頭資訊告訴客戶端什麼時候可以在試一次。

504該狀態也用於充當**或閘道器的伺服器;它指出接收伺服器沒有從遠端伺服器得到及時的響應。

505狀態碼是說伺服器並不支援在請求中所標明 http 版本。

根據狀態碼進行判斷是前端或是後端

檢視文件日誌

但是日誌容易在更新後會被覆蓋

4前端錯誤 js css j**ascript 靜態資源的錯誤

5activity的oncreate和onresume**中盡量避免耗時的**,應該盡可能的做比較少的事情,其實,任何執行在ui執行緒中的方法都應該盡可能簡短快速。類似網路或者db操作等可能長時間執行的操作,或者是類似調整bitmap大小等需要長時間計算的操作,都應該執行在工作執行緒中。

6.前端錯誤主要在頁面ui上如頁面布局和頁面展示資訊、資訊無法獲取等錯誤

7.後端對介面進行測試可以使用postman測介面

ANR 以及如何定位是前端問題還是後台問題?

anr 使用者可以選擇 等待 而讓程式繼續執行,也可以選擇 強制關閉 所以乙個流暢的合理的應用程式中不能出現anr,而讓使用者每次都要處理這個對話方塊。因此,在程式裡對響應效能的設計很重要,這樣系統不會顯示anr給使用者。預設情況下,在android中activity的最長執行時間是5秒,broad...

ANR 以及如何定位是前端問題還是後台問題?

1.anr 一般來說,在應用程式裡,100到200ms是使用者能感知阻滯的時間閾值。因此,這裡有一些額外的技巧來避免anr,並有助於讓你的應用程式看起來有響應性。如果你的應用程式為響應使用者輸入正在後台工作的話,可以顯示工作的進度 progressbar和progressdialog對這種情況來說很...

如何定位是前端問題還是後台問題

1.首先要搞清楚前端 後端分別是什麼 前端是使用者看得見摸得著的東西,主要體現在頁面的視覺效果以及互動設計上。後台,則側重於更深層面的東西,關於邏輯,關於資料,關於平台的穩定性與效能。後台主要負責實現具體的功能,舉個例子,還是那個註冊介面,前端寫好了介面,規定了你能輸入哪些資料,不能輸入哪些資料,而...