先來說說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...