Android UI性能优化 检测应用中的UI卡顿

这篇具有很好参考价值的文章主要介绍了Android UI性能优化 检测应用中的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线程中,如果执行耗时达到我们设置的阈值,则会执行mLogRunnable,打印出UI线程当前的堆栈信息;如果你阈值时间之内完成,则会remove掉该runnable。

(2)测试

用法很简单,在Application的onCreate中调用:

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)

会打印出耗时相关代码的信息,然后可以通过该log定位到耗时的地方。

三、 利用Choreographer


Android系统每隔16ms发出VSYNC信号,触发对UI进行渲染。SDK中包含了一个相关类,以及相关回调。理论上来说两次回调的时间周期应该在16ms,如果超过了16ms我们则认为发生了卡顿,我们主要就是利用两次回调间的时间周期来判断:

大致代码如下:

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);

}

});

}

}

第一次的时候开始检测,如果大于阈值则输出相关堆栈信息,否则则移除。

使用方式和上述一致。

四、 利用Looper机制


先看一段代码:

new Handler(Looper.getMainLooper())

.post(new Runnable() {

@Override

public void run() {}

}

该代码在UI线程中的MessageQueue中插入一个Message,最终会在loop()方法中取出并执行。

假设,我在run方法中,拿到MessageQueue,自己执行原本的Looper.loop()方法逻辑,那么后续的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年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
Android UI性能优化 检测应用中的UI卡顿,2024年程序员学习,android,ui,性能优化
Android UI性能优化 检测应用中的UI卡顿,2024年程序员学习,android,ui,性能优化
Android UI性能优化 检测应用中的UI卡顿,2024年程序员学习,android,ui,性能优化
Android UI性能优化 检测应用中的UI卡顿,2024年程序员学习,android,ui,性能优化
Android UI性能优化 检测应用中的UI卡顿,2024年程序员学习,android,ui,性能优化
Android UI性能优化 检测应用中的UI卡顿,2024年程序员学习,android,ui,性能优化
Android UI性能优化 检测应用中的UI卡顿,2024年程序员学习,android,ui,性能优化

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)
Android UI性能优化 检测应用中的UI卡顿,2024年程序员学习,android,ui,性能优化

最后

文章不易,如果大家喜欢这篇文章,或者对你有帮助希望大家多多点赞转发关注哦。文章会持续更新的。绝对干货!!!

  • Android进阶学习全套手册
    关于实战,我想每一个做开发的都有话要说,对于小白而言,缺乏实战经验是通病,那么除了在实际工作过程当中,我们如何去更了解实战方面的内容呢?实际上,我们很有必要去看一些实战相关的电子书。目前,我手头上整理到的电子书还算比较全面,HTTP、自定义view、c++、MVP、Android源码设计模式、Android开发艺术探索、Java并发编程的艺术、Android基于Glide的二次封装、Android内存优化——常见内存泄露及优化方案、.Java编程思想 (第4版)等高级技术都囊括其中。

Android UI性能优化 检测应用中的UI卡顿,2024年程序员学习,android,ui,性能优化

  • Android高级架构师进阶知识体系图
    关于视频这块,我也是自己搜集了一些,都按照Android学习路线做了一个分类。按照Android学习路线一共有八个模块,其中视频都有对应,就是为了帮助大家系统的学习。接下来看一下导图和对应系统视频吧!!!
    Android UI性能优化 检测应用中的UI卡顿,2024年程序员学习,android,ui,性能优化

  • Android对标阿里P7学习视频

Android UI性能优化 检测应用中的UI卡顿,2024年程序员学习,android,ui,性能优化

  • BATJ大厂Android高频面试题
    这个题库内容是比较多的,除了一些流行的热门技术面试题,如Kotlin,数据库,Java虚拟机面试题,数组,Framework ,混合跨平台开发,等
    Android UI性能优化 检测应用中的UI卡顿,2024年程序员学习,android,ui,性能优化

一个分类。按照Android学习路线一共有八个模块,其中视频都有对应,就是为了帮助大家系统的学习。接下来看一下导图和对应系统视频吧!!!
[外链图片转存中…(img-Sxm6W9sO-1711854533912)]

  • Android对标阿里P7学习视频

[外链图片转存中…(img-2ZU4joCX-1711854533912)]

  • BATJ大厂Android高频面试题
    这个题库内容是比较多的,除了一些流行的热门技术面试题,如Kotlin,数据库,Java虚拟机面试题,数组,Framework ,混合跨平台开发,等
    [外链图片转存中…(img-HoGwiD4q-1711854533913)]

本文已被CODING开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》收录文章来源地址https://www.toymoban.com/news/detail-851428.html

到了这里,关于Android UI性能优化 检测应用中的UI卡顿的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android复杂UI的性能优化实践 - PTQBookPageView 性能优化记录

    作者:彭泰强 要做性能优化,首先得知道性能怎么度量、怎么表示。因为性能是一个很抽象的词,我们必须把它量化、可视化。那么,因为是UI组件优化,我首先选用了 GPU呈现模式分析 这一工具。 在手机上的开发者模式里可以开启 GPU呈现(渲染)模式分析 这一工具,有的

    2024年02月14日
    浏览(33)
  • Android性能优化之应用瘦身(APK瘦身)

    关于作者:CSDN内容合伙人、技术专家, 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 ,擅长java后端、移动开发、人工智能等,希望大家多多支持。 我们继续总结学习 Android 知识 ,温故知新。 lint检查代码 APK瘦身优化的优先级相对来说是比较低的,因为优化后

    2024年02月09日
    浏览(26)
  • IDEA性能优化设置(解决卡顿问题)

            在我们日常使用IDEA进行开发时,可能会遇到许多卡顿的瞬间,明明我们的机器配置也不低啊?为什么就会一直卡顿呢?         原来这是因为IDEA软件在我们安装的时候就设置了默认的内存使用上限(通常很小),这就是造成我们使用IDEA时卡顿的根本原因。比

    2024年01月17日
    浏览(36)
  • JavaWeb应用中的安全与性能优化

    JavaWeb应用是现代互联网应用的核心组成部分,它们为用户提供了丰富的功能和服务。然而,JavaWeb应用在安全和性能方面面临着巨大的挑战。这篇文章将探讨JavaWeb应用中的安全与性能优化,并提供一些实用的最佳实践。 JavaWeb应用的安全性和性能对于企业和用户来说都是至关

    2024年02月20日
    浏览(23)
  • Android应用优化之最基本的UI层显示优化

    .Android Studio有自带的视图分析工具 Layout Inspector(布局检查器),打开方式菜单栏Tools– Layout Inspector。 可以看到Layout Inspector最右侧的属性栏可以查看每一个View的所附带的属性及属性值。 3.接下来我们主要分析以下三个问题: 【问题1】没有用的父布局 通过工具和查看代码,

    2024年04月28日
    浏览(27)
  • 记一次卡顿的性能优化经历实操

    本篇的性能优化不是八股文类的优化方案,而是针对具体场景,具体分析,从排查卡顿根因到一步步寻找解决方案,甚至是规避等方案来最终解决性能问题的经历实操 所以,解决方案可能不通用,不适用于你的场景,但这个解决过程是如何一步步去处理的,解决思路是怎么样

    2024年02月02日
    浏览(28)
  • 怎么检测UI卡顿?(线上及线下)

    在Android系统中,我们知道UI线程负责我们所有视图的布局,渲染工作,UI在更新期间,如果UI线程的执行时间超过16ms,则会产生丢帧的现象,而大量的丢帧就会造成卡顿,影响用户体验。 在UI线程中做了大量的耗时操作,导致了UI刷新工作的阻塞。 系统CPU资源紧张,APP所能分

    2024年02月11日
    浏览(24)
  • IDEA性能优化设置(解决卡顿问题)修改内存

    在我们日常使用IDEA进行开发时,可能会遇到许多卡顿的瞬间,明明我们的机器配置也不低啊?为什么就会一直卡顿呢? 原来这是因为IDEA软件在我们安装的时候就设置了默认的内存使用上限(通常很小),这就是造成我们使用IDEA时卡顿的根本原因。比如我这台电脑,明明是

    2023年04月23日
    浏览(45)
  • Android性能优化之游戏收敛线程,减少OOM发生(epic 检测线程调用/booster减少常驻线程超时销毁)

    先来了解下一个空白app的进程中线程数量 : 分析迷你世界中app线程之前,先来了解下空白app ,中线程情况: 一个空白app的线程大概是27个: 一个空白的的app,包含FinalizerDaemon线程、FinalizerWatchd线程、RenderThread、主线程、ReferenceQueued、HeapTaskDaemon、SignalCatcher、GCDaemon、hwuiTa

    2024年02月14日
    浏览(77)
  • IDEA卡顿,进行性能优化设置(亲测有效)——情况一

    IDEA重新激活后,运行IDEA卡的非常卡顿,没有运行项目,CPU占比也非常高: 可能的原因是,在IDEA的配置中,给他分配的空间比较小 步骤一 选择顶部导航栏中的Help,然后点击Edit Custom VM Options(自定义虚拟机内存)。 点击后,接下来我们将会看到这个界面: 步骤二、我们对其

    2024年04月08日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包