日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

安卓卡顿ANR测试

發布時間:2024/9/30 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 安卓卡顿ANR测试 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

卡頓ANR與Android就是天生的朋友,從Android第一天誕生直到現在的8核CPU,Android還是未能擺脫頁面不流暢,卡,死機的詬病,所以個人認為卡頓ANR測試是性能測試最主要的一塊。

卡頓簡單的來說,就是手機沒有及時響應、頁面延遲,出現丟幀的現象,或者點擊無響應。絕大多數的卡頓,稍等片刻系統就會恢復正常,但假如超過5S,就可能會引發手機ANR,造成更高級別的警告。如圖所示:

1.什么會引發ANR?

在Android里,應用程序的響應性是由Activity Manager和WindowManager系統服務監視的 。當它監測到以下情況中的一個時,Android就會針對特定的應用程序顯示ANR:

ANR一般有三種類型:

1)KeyDispatchTimeout(5 seconds) --主要類型按鍵或觸摸事件在特定時間內無響應

2)BroadcastTimeout(10 seconds) --BroadcastReceiver在特定時間內無法處理完成

3)ServiceTimeout(20 seconds) --小概率類型 Service在特定的時間內無法處理完成

這三種原因都會造成ANR,但是第一種情況基本上占了所有ANR的百分之九十以上,第三種的情況微乎其微。這三種ANR不是孤立的,有可能會相互影響。例如一個應用程序進程中同時有一個正在顯示的Activity和一個正在處理消息的BroadcastReceiver,它們都運行在這個進程的主線程中。如果BR的onReceive函數沒有返回,此時用戶點擊屏幕,而onReceive超過5秒仍然沒有返回,主線程無法處理用戶輸入事件,就會引起第1種ANR。如果繼續超過10秒沒有返回,又會引起第2種ANR。發生ANR的主要原因是潛在的耗時操作,例如網絡或數據庫操作,或者高耗時的計算如改變位圖尺寸,應該在子線程里(或者以數據庫操作為例,通過異步請求的方式)來完成。然而,不是說你的主線程阻塞在那里等待子線程的完成——也不是調用 Thread.wait()或是Thread.sleep()。替代的方法是,主線程應該為子線程提供一個Handler,以便完成時能夠提交給主線程。以這種方式設計你的應用程序,將能保證你的主線程保持對輸入的響應性并能避免由于5秒輸入事件的超時引發的ANR對話框。

三種ANR發生時都會在log中輸出錯誤信息,你會發現各個應用進程和系統進程的函數堆棧信息都輸出到了一個/data/anr/traces.txt的文件中,ROOT手機導出該文件后,分析此日志可以得出一些結論,但traces文件信息比較抽象,難理解。總的來說,日志難收集,結果難分析。

2.如何避免ANR?

1) 運行在主線程里的任何方法都盡可能少做事情。特別是,Activity應該在它的關鍵生命周期方法(如onCreate()和onResume())里盡可能少的去做創建操作。(可以采用重新開啟子線程的方式,然后使用Handler+Message的方式做一些操作,比如更新主線程中的ui等)

2) 應用程序應該避免在BroadcastReceiver里做耗時的操作或計算。但不再是在子線程里做這些任務(因為 BroadcastReceiver的生命周期短),替代的是,如果響應Intent廣播需要執行一個耗時的動作的話,應用程序應該啟動一個 Service。(此處需要注意的是可以在廣播接受者中啟動Service,但是卻不可以在Service中啟動broadcasereciver,關于原因后續會有介紹,此處不是本文重點)

3)避免在Intent Receiver里啟動一個Activity,因為它會創建一個新的畫面,并從當前用戶正在運行的程序上搶奪焦點。如果你的應用程序在響應Intent廣 播時需要向用戶展示什么,你應該使用Notification Manager來實現。

TraceView是android SDK中自帶的一個性能測試工具,可以在Tools目錄下找到。TraceView能很精確的查看到每一個類,每一個類方法的執行時間。APP卡頓我們只需要保留當時的traceview文件,通過查看該文件,就可以定位絕大部分問題。

通過Debug.startMethodTracing(String FileName)和Debug.stopMethodTracing()來記錄一段時間內方法執行情況。

在主線程中不停的插入一個輕量級別的操作,如果該變量在指定的時間內,沒有改變,則說明此刻APP卡頓。卡把ANR這種警告變成錯誤讓APP閃退,持久化當時信息。

原理圖:




總結

以上是生活随笔為你收集整理的安卓卡顿ANR测试的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 成人免费看片 | 国产精品久久久久久免费观看 | 国产精品yy | 国产精品一区二区三区在线看 | 久久涩视频 | 亚洲乱码一区二区三区 | 婷婷激情小说网 | 调教小屁屁白丝丨vk | 日韩欧美综合久久 | 亚洲一级在线 | 日韩国产精品一区二区三区 | 影音先锋丝袜制服 | av资源天堂 | 日韩欧美国产成人 | 国产91av在线| av在线天堂 | 成人福利社 | 影音先锋中文字幕在线 | 国产成人免费电影 | 日韩一级影视 | 国产精品交换 | 黄色网址在线免费 | 自拍视频第一页 | 茄子视频色 | 久久免费看少妇高潮v片特黄 | 欧美另类精品 | 99热久久这里只有精品 | 日韩伊人 | 亚州视频在线 | 亚洲精品午夜精品 | 天天草影院 | 日老女人视频 | 精品动漫一区 | 99国产精品久久久 | 麻豆短视频在线观看 | 国产在线观看www | 国产成人亚洲综合a∨婷婷 台湾a级片 | 香蕉视频在线免费看 | 西比尔在线观看完整视频高清 | 狠狠91 | 成年人免费看 | 国产精品人成在线观看免费 | 狠狠2020| 极品国产91在线网站 | 激情一区二区三区 | 韩国三级黄色 | avxx | 麻豆激情视频 | 免费一区二区三区四区 | 免费在线不卡av | 精品久久久久久久久中文字幕 | 成人首页 | 天天综合在线视频 | 一本久草 | 亚欧洲精品视频在线观看 | 国产亚洲在线观看 | 婷婷射 | 国产白丝av | 国产精品91一区二区 | 在线观视频免费观看 | youjizz国产 | 久草资源在线视频 | 亚洲免费黄色网 | 日韩中文字幕在线免费观看 | 免费看黄色小视频 | 一起艹在线观看 | 熟睡人妻被讨厌的公侵犯 | 亚洲黄色网络 | 黄色男人的天堂 | 在线看91 | 三级免费| 中国在线观看免费高清视频播放 | 国产精品3区 | 欧美久久成人 | av男人的天堂在线观看 | 青娱乐91| 中文字幕一区二区三区乱码不卡 | 成人精品亚洲人成在线 | 国模吧一区二区 | 久久人人爽人人人人片 | 亚洲精品少妇 | 久久美女免费视频 | 国产精品国产三级国产aⅴ下载 | www.色在线观看 | 中文字幕国产专区 | 一本色道久久综合亚洲精品按摩 | 精品人妻一区二区色欲产成人 | 亚洲一区二区三区精品视频 | 亚洲欧美在线视频免费 | 人人干人人舔 | 中文久久乱码一区二区 | 97精品国产97久久久久久春色 | 亚洲综合自拍 | 视频在线一区二区 | 久热精品在线视频 | 国产精品久久久久久久久免费软件 | 有码一区二区三区 | 亚洲喷水| 少妇太爽了太深了太硬了 |