国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Android UI性能優(yōu)化 檢測應(yīng)用中的UI卡頓

這篇具有很好參考價值的文章主要介紹了Android UI性能優(yōu)化 檢測應(yīng)用中的UI卡頓。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

}

};

public static LogMonitor getInstance() {

return sInstance;

}

public boolean isMonitor() {

return mIoHandler.hasCallbacks(mLogRunnable);

}

public void startMonitor() {

mIoHandler.postDelayed(mLogRunnable, TIME_BLOCK);

}

public void removeMonitor() {

mIoHandler.removeCallbacks(mLogRunnable);

}

}

我們利用了HandlerThread這個類,同樣利用了Looper機制,只不過在非UI線程中,如果執(zhí)行耗時達到我們設(shè)置的閾值,則會執(zhí)行mLogRunnable,打印出UI線程當(dāng)前的堆棧信息;如果你閾值時間之內(nèi)完成,則會remove掉該runnable。

(2)測試

用法很簡單,在Application的onCreate中調(diào)用:

BlockDetectByPrinter.start();

即可。

然后我們在Activity里面,點擊一個按鈕,讓睡眠2s,測試下:

findViewById(R.id.id_btn02)

.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

try {

Thread.sleep(2000);

} catch (InterruptedException e) {

}

}

});

運行點擊時,會打印出log:

02-21 00:26:26.408 2999-3014/com.zhy.testlp E/TAG:

java.lang.VMThread.sleep(Native Method)

java.lang.Thread.sleep(Thread.java:1013)

java.lang.Thread.sleep(Thread.java:995)

com.zhy.testlp.MainActivity$2.onClick(MainActivity.java:70)

android.view.View.performClick(View.java:4438)

android.view.View$PerformClick.run(View.java:18422)

android.os.Handler.handleCallback(Handler.java:733)

android.os.Handler.dispatchMessage(Handler.java:95)

會打印出耗時相關(guān)代碼的信息,然后可以通過該log定位到耗時的地方。

三、 利用Choreographer


Android系統(tǒng)每隔16ms發(fā)出VSYNC信號,觸發(fā)對UI進行渲染。SDK中包含了一個相關(guān)類,以及相關(guān)回調(diào)。理論上來說兩次回調(diào)的時間周期應(yīng)該在16ms,如果超過了16ms我們則認為發(fā)生了卡頓,我們主要就是利用兩次回調(diào)間的時間周期來判斷:

大致代碼如下:

public class BlockDetectByChoreographer {

public static void start() {

Choreographer.getInstance()

.postFrameCallback(new Choreographer.FrameCallback() {

@Override

public void doFrame(long l) {

if (LogMonitor.getInstance().isMonitor()) {

LogMonitor.getInstance().removeMonitor();

}

LogMonitor.getInstance().startMonitor();

Choreographer.getInstance().postFrameCallback(this);

}

});

}

}

第一次的時候開始檢測,如果大于閾值則輸出相關(guān)堆棧信息,否則則移除。

使用方式和上述一致。

四、 利用Looper機制


先看一段代碼:

new Handler(Looper.getMainLooper())

.post(new Runnable() {

@Override

public void run() {}

}

該代碼在UI線程中的MessageQueue中插入一個Message,最終會在loop()方法中取出并執(zhí)行。

假設(shè),我在run方法中,拿到MessageQueue,自己執(zhí)行原本的Looper.loop()方法邏輯,那么后續(xù)的UI線程的Message就會將直接讓我們處理,這樣我們就可以做一些事情:

public class BlockDetectByLooper {

private static final String FIELD_mQueue = “mQueue”;

private static final String METHOD_next = “next”;

public static void start() {

new Handler(Looper.getMainLooper()).post(new Runnable() {

@Override

public void run() {

try {

Looper mainLooper = Looper.getMainLooper();

final Looper me = mainLooper;

final MessageQueue queue;

Field fieldQueue = me.getClass().getDeclaredField(FIELD_mQueue);

fieldQueue.setAccessible(true);

queue = (MessageQueue) fieldQueue.get(me);

Method methodNext = queue.getClass().getDeclaredMethod(METHOD_next);

methodNext.setAccessible(true);

Binder.clearCallingIdentity();

for (; ; ) {

Message msg = (Message) methodNext.invoke(queue);

if (msg == null) {

return;

}

LogMonitor.getInstance().startMonitor();

msg.getTarget().dispatchMessage(msg);

msg.recycle();

LogMonitor.getInstance().removeMonitor();

}

} catch (Exception e) {

e.printStackTrace();

}

}

自我介紹一下,小編13年上海交大畢業(yè),曾經(jīng)在小公司待過,也去過華為、OPPO等大廠,18年進入阿里一直到現(xiàn)在。

深知大多數(shù)Android工程師,想要提升技能,往往是自己摸索成長或者是報班學(xué)習(xí),但對于培訓(xùn)機構(gòu)動則幾千的學(xué)費,著實壓力不小。自己不成體系的自學(xué)效果低效又漫長,而且極易碰到天花板技術(shù)停滯不前!

因此收集整理了一份《2024年Android移動開發(fā)全套學(xué)習(xí)資料》,初衷也很簡單,就是希望能夠幫助到想自學(xué)提升又不知道該從何學(xué)起的朋友,同時減輕大家的負擔(dān)。
Android UI性能優(yōu)化 檢測應(yīng)用中的UI卡頓,2024年程序員學(xué)習(xí),android,ui,性能優(yōu)化
Android UI性能優(yōu)化 檢測應(yīng)用中的UI卡頓,2024年程序員學(xué)習(xí),android,ui,性能優(yōu)化
Android UI性能優(yōu)化 檢測應(yīng)用中的UI卡頓,2024年程序員學(xué)習(xí),android,ui,性能優(yōu)化
Android UI性能優(yōu)化 檢測應(yīng)用中的UI卡頓,2024年程序員學(xué)習(xí),android,ui,性能優(yōu)化
Android UI性能優(yōu)化 檢測應(yīng)用中的UI卡頓,2024年程序員學(xué)習(xí),android,ui,性能優(yōu)化
Android UI性能優(yōu)化 檢測應(yīng)用中的UI卡頓,2024年程序員學(xué)習(xí),android,ui,性能優(yōu)化
Android UI性能優(yōu)化 檢測應(yīng)用中的UI卡頓,2024年程序員學(xué)習(xí),android,ui,性能優(yōu)化

既有適合小白學(xué)習(xí)的零基礎(chǔ)資料,也有適合3年以上經(jīng)驗的小伙伴深入學(xué)習(xí)提升的進階課程,基本涵蓋了95%以上Android開發(fā)知識點,真正體系化!

由于文件比較大,這里只是將部分目錄大綱截圖出來,每個節(jié)點里面都包含大廠面經(jīng)、學(xué)習(xí)筆記、源碼講義、實戰(zhàn)項目、講解視頻,并且后續(xù)會持續(xù)更新

如果你覺得這些內(nèi)容對你有幫助,可以添加V獲取:vip204888 (備注Android)
Android UI性能優(yōu)化 檢測應(yīng)用中的UI卡頓,2024年程序員學(xué)習(xí),android,ui,性能優(yōu)化

最后

文章不易,如果大家喜歡這篇文章,或者對你有幫助希望大家多多點贊轉(zhuǎn)發(fā)關(guān)注哦。文章會持續(xù)更新的。絕對干貨?。?!

  • Android進階學(xué)習(xí)全套手冊
    關(guān)于實戰(zhàn),我想每一個做開發(fā)的都有話要說,對于小白而言,缺乏實戰(zhàn)經(jīng)驗是通病,那么除了在實際工作過程當(dāng)中,我們?nèi)绾稳ジ私鈱崙?zhàn)方面的內(nèi)容呢?實際上,我們很有必要去看一些實戰(zhàn)相關(guān)的電子書。目前,我手頭上整理到的電子書還算比較全面,HTTP、自定義view、c++、MVP、Android源碼設(shè)計模式、Android開發(fā)藝術(shù)探索、Java并發(fā)編程的藝術(shù)、Android基于Glide的二次封裝、Android內(nèi)存優(yōu)化——常見內(nèi)存泄露及優(yōu)化方案、.Java編程思想 (第4版)等高級技術(shù)都囊括其中。

Android UI性能優(yōu)化 檢測應(yīng)用中的UI卡頓,2024年程序員學(xué)習(xí),android,ui,性能優(yōu)化

  • Android高級架構(gòu)師進階知識體系圖
    關(guān)于視頻這塊,我也是自己搜集了一些,都按照Android學(xué)習(xí)路線做了一個分類。按照Android學(xué)習(xí)路線一共有八個模塊,其中視頻都有對應(yīng),就是為了幫助大家系統(tǒng)的學(xué)習(xí)。接下來看一下導(dǎo)圖和對應(yīng)系統(tǒng)視頻吧?。。?br>Android UI性能優(yōu)化 檢測應(yīng)用中的UI卡頓,2024年程序員學(xué)習(xí),android,ui,性能優(yōu)化

  • Android對標(biāo)阿里P7學(xué)習(xí)視頻

Android UI性能優(yōu)化 檢測應(yīng)用中的UI卡頓,2024年程序員學(xué)習(xí),android,ui,性能優(yōu)化

  • BATJ大廠Android高頻面試題
    這個題庫內(nèi)容是比較多的,除了一些流行的熱門技術(shù)面試題,如Kotlin,數(shù)據(jù)庫,Java虛擬機面試題,數(shù)組,F(xiàn)ramework ,混合跨平臺開發(fā),等
    Android UI性能優(yōu)化 檢測應(yīng)用中的UI卡頓,2024年程序員學(xué)習(xí),android,ui,性能優(yōu)化

一個分類。按照Android學(xué)習(xí)路線一共有八個模塊,其中視頻都有對應(yīng),就是為了幫助大家系統(tǒng)的學(xué)習(xí)。接下來看一下導(dǎo)圖和對應(yīng)系統(tǒng)視頻吧?。?!
[外鏈圖片轉(zhuǎn)存中…(img-Sxm6W9sO-1711854533912)]

  • Android對標(biāo)阿里P7學(xué)習(xí)視頻

[外鏈圖片轉(zhuǎn)存中…(img-2ZU4joCX-1711854533912)]

  • BATJ大廠Android高頻面試題
    這個題庫內(nèi)容是比較多的,除了一些流行的熱門技術(shù)面試題,如Kotlin,數(shù)據(jù)庫,Java虛擬機面試題,數(shù)組,F(xiàn)ramework ,混合跨平臺開發(fā),等
    [外鏈圖片轉(zhuǎn)存中…(img-HoGwiD4q-1711854533913)]

本文已被CODING開源項目:《Android學(xué)習(xí)筆記總結(jié)+移動架構(gòu)視頻+大廠面試真題+項目實戰(zhàn)源碼》收錄文章來源地址http://www.zghlxwxcb.cn/news/detail-851428.html

到了這里,關(guān)于Android UI性能優(yōu)化 檢測應(yīng)用中的UI卡頓的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Android復(fù)雜UI的性能優(yōu)化實踐 - PTQBookPageView 性能優(yōu)化記錄

    Android復(fù)雜UI的性能優(yōu)化實踐 - PTQBookPageView 性能優(yōu)化記錄

    作者:彭泰強 要做性能優(yōu)化,首先得知道性能怎么度量、怎么表示。因為性能是一個很抽象的詞,我們必須把它量化、可視化。那么,因為是UI組件優(yōu)化,我首先選用了 GPU呈現(xiàn)模式分析 這一工具。 在手機上的開發(fā)者模式里可以開啟 GPU呈現(xiàn)(渲染)模式分析 這一工具,有的

    2024年02月14日
    瀏覽(28)
  • Android性能優(yōu)化之應(yīng)用瘦身(APK瘦身)

    Android性能優(yōu)化之應(yīng)用瘦身(APK瘦身)

    關(guān)于作者:CSDN內(nèi)容合伙人、技術(shù)專家, 從零開始做日活千萬級APP。 專注于分享各領(lǐng)域原創(chuàng)系列文章 ,擅長java后端、移動開發(fā)、人工智能等,希望大家多多支持。 我們繼續(xù)總結(jié)學(xué)習(xí) Android 知識 ,溫故知新。 lint檢查代碼 APK瘦身優(yōu)化的優(yōu)先級相對來說是比較低的,因為優(yōu)化后

    2024年02月09日
    瀏覽(18)
  • IDEA性能優(yōu)化設(shè)置(解決卡頓問題)

    IDEA性能優(yōu)化設(shè)置(解決卡頓問題)

    ????????在我們?nèi)粘J褂肐DEA進行開發(fā)時,可能會遇到許多卡頓的瞬間,明明我們的機器配置也不低?。繛槭裁淳蜁恢笨D呢? ????????原來這是因為IDEA軟件在我們安裝的時候就設(shè)置了默認的內(nèi)存使用上限(通常很小),這就是造成我們使用IDEA時卡頓的根本原因。比

    2024年01月17日
    瀏覽(17)
  • JavaWeb應(yīng)用中的安全與性能優(yōu)化

    JavaWeb應(yīng)用是現(xiàn)代互聯(lián)網(wǎng)應(yīng)用的核心組成部分,它們?yōu)橛脩籼峁┝素S富的功能和服務(wù)。然而,JavaWeb應(yīng)用在安全和性能方面面臨著巨大的挑戰(zhàn)。這篇文章將探討JavaWeb應(yīng)用中的安全與性能優(yōu)化,并提供一些實用的最佳實踐。 JavaWeb應(yīng)用的安全性和性能對于企業(yè)和用戶來說都是至關(guān)

    2024年02月20日
    瀏覽(15)
  • Android應(yīng)用優(yōu)化之最基本的UI層顯示優(yōu)化

    Android應(yīng)用優(yōu)化之最基本的UI層顯示優(yōu)化

    .Android Studio有自帶的視圖分析工具 Layout Inspector(布局檢查器),打開方式菜單欄Tools– Layout Inspector。 可以看到Layout Inspector最右側(cè)的屬性欄可以查看每一個View的所附帶的屬性及屬性值。 3.接下來我們主要分析以下三個問題: 【問題1】沒有用的父布局 通過工具和查看代碼,

    2024年04月28日
    瀏覽(20)
  • 記一次卡頓的性能優(yōu)化經(jīng)歷實操

    記一次卡頓的性能優(yōu)化經(jīng)歷實操

    本篇的性能優(yōu)化不是八股文類的優(yōu)化方案,而是針對具體場景,具體分析,從排查卡頓根因到一步步尋找解決方案,甚至是規(guī)避等方案來最終解決性能問題的經(jīng)歷實操 所以,解決方案可能不通用,不適用于你的場景,但這個解決過程是如何一步步去處理的,解決思路是怎么樣

    2024年02月02日
    瀏覽(32)
  • 怎么檢測UI卡頓?(線上及線下)

    怎么檢測UI卡頓?(線上及線下)

    在Android系統(tǒng)中,我們知道UI線程負責(zé)我們所有視圖的布局,渲染工作,UI在更新期間,如果UI線程的執(zhí)行時間超過16ms,則會產(chǎn)生丟幀的現(xiàn)象,而大量的丟幀就會造成卡頓,影響用戶體驗。 在UI線程中做了大量的耗時操作,導(dǎo)致了UI刷新工作的阻塞。 系統(tǒng)CPU資源緊張,APP所能分

    2024年02月11日
    瀏覽(21)
  • IDEA性能優(yōu)化設(shè)置(解決卡頓問題)修改內(nèi)存

    IDEA性能優(yōu)化設(shè)置(解決卡頓問題)修改內(nèi)存

    在我們?nèi)粘J褂肐DEA進行開發(fā)時,可能會遇到許多卡頓的瞬間,明明我們的機器配置也不低?。繛槭裁淳蜁恢笨D呢? 原來這是因為IDEA軟件在我們安裝的時候就設(shè)置了默認的內(nèi)存使用上限(通常很?。?,這就是造成我們使用IDEA時卡頓的根本原因。比如我這臺電腦,明明是

    2023年04月23日
    瀏覽(40)
  • Android性能優(yōu)化之游戲收斂線程,減少OOM發(fā)生(epic 檢測線程調(diào)用/booster減少常駐線程超時銷毀)

    Android性能優(yōu)化之游戲收斂線程,減少OOM發(fā)生(epic 檢測線程調(diào)用/booster減少常駐線程超時銷毀)

    先來了解下一個空白app的進程中線程數(shù)量 : 分析迷你世界中app線程之前,先來了解下空白app ,中線程情況: 一個空白app的線程大概是27個: 一個空白的的app,包含F(xiàn)inalizerDaemon線程、FinalizerWatchd線程、RenderThread、主線程、ReferenceQueued、HeapTaskDaemon、SignalCatcher、GCDaemon、hwuiTa

    2024年02月14日
    瀏覽(28)
  • IDEA卡頓,進行性能優(yōu)化設(shè)置(親測有效)——情況一

    IDEA卡頓,進行性能優(yōu)化設(shè)置(親測有效)——情況一

    IDEA重新激活后,運行IDEA卡的非??D,沒有運行項目,CPU占比也非常高: 可能的原因是,在IDEA的配置中,給他分配的空間比較小 步驟一 選擇頂部導(dǎo)航欄中的Help,然后點擊Edit Custom VM Options(自定義虛擬機內(nèi)存)。 點擊后,接下來我們將會看到這個界面: 步驟二、我們對其

    2024年04月08日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包