Android 檢測UI卡頓問題

2021-08-14 17:33:58 字數 1399 閱讀 8821

先來說說anr。

出現anr的場景有一下幾種:

輸入事件(包括按鍵分發事件)5秒內沒有處理完畢。

執行broadcastreceiver的onreceive()函式時10秒內沒有處理完畢。

service的各個生命週期函式時20秒內沒有處理完畢。

造成以上幾種anr場景的原因有2個:

主線程執行了耗時操作,比如資料庫操作或網路程式設計。

其他程序(就是其他程式)占用cpu導致本程序得不到cpu時間片,比如其他程序的頻繁讀寫操作可能會導致這個問題。

我在網上找到一篇鴻洋大神關於檢測應用中的ui卡頓的博文,發現一種很有趣的方法,在此記錄一下。

其基本原理是利用looper原始碼中列印log資訊,詳細原理請看 android ui效能優化 檢測應用中的ui卡頓

具體**如下:

public

class

looperprinter

if (content.startswith(end))

}});

}}

looper竟然還能這麼用,漲知識了!!

public

class

logmonitor

private

static runnable printrunnable = new runnable()

log.e("tag", builder.tostring());}};

public

static logmonitor getinstance()

public

void

startmonitor()

public

void

removemonitor()

}

做乙個倒計時的工具類,例項中是結合handlerthread和handler做的計時器,當列印「start」時,呼叫startmonitor方法,延時(1秒)執行列印堆疊資訊,如果在規定時間內沒有呼叫removemonitor方法,證明沒有在規定時間內列印「end」,也就是說在main looper中,當前message執行時間超過規定時間,那麼就會執行列印堆疊資訊。列印的堆疊資訊中會出現執行超過的方法。

@override

public resources getresources()

結果getresources方法用了1568毫秒,然後我把這段去掉之後,就沒有這麼多了(因為每個時間都沒有超過1秒,所以我也不知道是哪個時間了)。我也有嘗試去找代替方案,和老大討論了一下,這個需求不大,就去掉了。希望知道的指點一下,謝謝!!

android ui效能優化 檢測應用中的ui卡頓

UI卡頓假死問題

ui卡頓假死問題 誤區1 使用不同的執行緒操作ui控制項和耗時操作 即,跨執行緒操作ui控制項checkforillegalcrossthreadcalls false 注意 此處只是為了記錄.原始同步操作如下所示 12 3456 78privatevoidbutton1 click objects...

android 滑動卡頓問題彙總

布局巢狀 太依賴weight 使用多層weight布局等可能會引起應用的卡頓。這個是主要的原因,好多次遇到卡頓都是布局出了問題。現在手機的運算速率都比較高,所以可以優先考慮是不是布局的問題 布局巢狀還會引起其他錯誤。布局盡量簡潔。原因一 滑動的時候需要預載入資料導致ui卡頓 原因二 在onpages...

android頁面卡頓

安卓手機應用中介面切換卡頓和滑動卡頓的區別是什麼,請從專業角度解釋?或者給出乙個開發者需要注意事項?於是直接貼我的答案 不過需要注意的是,我舉的例子並不是完備的。而且答題時間有限,而我打字有點慢.所以如果有錯也別打我oaq 另外 本答案基本基於 google 的 android開發指導。在andro...