Android性能优化——运算

Android性能优化:高效运算实践 在实际开发中,根据具体的场景和需求,可以结合多种优化方法来达到更好的效果。但是,优化的过程也需要权衡资源的使用和代码的可读性,避免过度优化带来的复杂性。本文将介绍一些在Android应用开发中优化运算的实践方法,并提供相应的源代码示例。总结起来,通过使用原生数据类型、避免频繁的对象创建和销毁、使用高效的算法和数据结构、合理使用多线程和适当的数据缓存,可以提升Android应用程序的运算性能。但在实际应用中,需要根据具体场景和需求综合考虑,避免过度优化而导致代码复杂性的增加。 阅读详情

Android性能优化——运算

原Udacity视频链接

1. 计算和内存问题

Android中的Java代码,会需要经过编译优化在执行的过程,代码的不同写法会影响Java编译器的优化效率。不同的for循环写法就会对编译器优化这段代码产生不同的效率,当程序中包含大量这种可优化的代码的时候,运算性能就会出现问题。当我们想要大幅提升计算性能的时,就意味着我们需要理解每段代码是如何在硬件上执行的。

2. 缓慢的函数性能

代码运行时间过长,很大程度上归咎于编程语言,当然还有相关硬件执行代码的方式,例如在一些老旧的硬件上,执行浮点比较算法分支语句所花的时间,几乎是整数或布尔值的四倍。现代硬件通常不需要处理这种细微问题,但是这也说明了一个重要的观点,编码方式会影响性能,具体视硬件上执行的编程语言而有所不同,这个问题甚至可以追溯到芯片架构。
在这里插入图片描述
在这里插入图片描述
为了优化我们的代码,我们需要理解系统如何运行代码,缓慢的函数执行通常是由两方面的问题造成的,第一种是执行速度很慢的函数,这种函数很容易发现,当函数执行速度比预想的慢数倍、数十倍时,我们只需要找到运行很慢的函数,查看代码然后想办法解决就可以了。更难发现的事第二种类型,想方设法也难以发现,尤其是当我们有数以千计的函数时,每个函数的时间都额外增加一毫秒,从而导致整个程序变慢数百毫秒,这种类型的问题很难追踪。

在这里插入图片描述
在这里插入图片描述
但是Android SDK 有一些很不错的工具可以帮助我们找到这些有问题的代码。

3. TraceView

打开Android Device Monitor,切换至DDMS窗口,点击右边上面想要追踪的进程,再点击如图按钮
在这里插入图片描述
然后再再APP里面进行一些操作,做一些你想要跟踪的事件,然后再次点击按钮停止。

现在Traceview已弃用,如果使用的是Android Studio 3.2或更高版本,Google官方推荐使用 CPU Profiler 进行检测跟踪。

传送门

4. 批处理(batching)和缓存(caching)

Batching是在真正执行运算操作之前对数据进行批量预处理。
视频中举一个例子
在查找集合中的值时,最有效的是进行排序,然后进行二分搜索等等。
在这里插入图片描述
我们写了一个函数,提供一个集合和一个值,对集合排序查看值是否在集合中。对于少量数据,这样完全是可以的,但是假如有10000个值,而且共需要数百万组数据,排序所花费的时间将会增加很多倍。

这并不是明智的方法,这时我们就需要用到批处理,对这组数据一次性完成排序,然后查找所有10,000个值。

我们找到重复的运算,找到之后,进行批处理。

在这里插入图片描述
缓存是与批处理相似的概念。

以计算机为例,内存的作用是用来存储信息,让CPU能够更快地访问数据,其速度远快于访问硬盘数据。或者以网络为例,世界各地存在大型服务器仓库,它们被称为数据中心。它们的作用是存储或缓冲被频繁访问的内容。这样,你的计算机就不必每次都访问远在12,000英里之外的服务器。以代码为例,最常见的缓存优化通常涉及多次计算,但是结果始终相同的数据。例如,在循环计算中,你计算一个4x4数列的导数,结算始终是相同的,每次重新计算循环迭代,实际是在浪费计算机资源,相反,在循环流程的外部存储导数的结果,并让你的内部循环语句引用缓存结果,可以极大地提升效率。
在这里插入图片描述
在这里插入图片描述

5. 阻塞UI线程

提升代码的运算效率是改善性能的一方面,让代码执行在哪个线程也同样很重要。我们都知道Android的Main Thread也是UI Thread,它需要承担用户的触摸事件的反馈,界面视图的渲染等操作。这就意味着,我们不能在Main Thread里面做任何非轻量级的操作,类似I/O操作会花费大量时间,这很有可能会导致界面渲染发生丢帧的现象,甚至有可能导致ANR。防止这些问题的解决办法就是把那些可能有性能问题的代码移到非UI线程进行操作。

6. 容器的性能

另外我们需要注意运算性能问题是基础算法和容器的选择,例如冒泡排序和快速排序的性能差异。

在这里插入图片描述

Java 提供了很多现成的容器Vector,ArrayList,LinkedList,HashMap等等,我们需要了解这些基础容器的性能差异以及适用场景。这样才能够选择合适的容器,达到最佳的性能。

在这里插入图片描述

时序SDC约束set_data_check及常见应用场景 时序约束SDC之set_data_check命令及常见应用场景解析 阅读详情

相关推荐

2025海外代理IP深度横评:Bright Data、IPFoxy、SmartProxy等六大服务商实战对比

本文深度横评2025年六大海外代理IP服务商(Bright Data、IPFoxy、SmartProxy、IPIPGO、Kookeey及青果网络),基于实战测试数据,从IP池质量、速度稳定性、性价比等维度进行对比。针对跨境电商、数据爬虫、社交媒体管理等不同业务场景,提供精准的选购指南与避坑建议,帮助企业用户根据自身需求选择最合适的代理IP解决方案。

weixin_29196891的博客 434

Android 位运算左移、右移、与(&)、非(~)、或(|)、异或(^),高位、低位的保留

左移 例:10 <<4 表示 :10左移4位,10的二进制:1010;左移:1010 0000;(移多少位,加多少0),二进制1010 0000的十进制为:160,即:10 << 4 = 160; 右移 例:10 >> 3 表示 :10左移4位,10的二进制:1010;右移:0001 ;二进制0001的十进制为:1,即:10 << 3 = 1; 与(&) 都为的1,结果才为1,否则结果为0 例:100&20; 即:110..

简公子的博客 2726

通俗易通解释SLAM问题的数学描述:运动方程和观测方程

高翔博士在他的《视觉SLAM十四讲》中把SLAM问题的数学描述抽象成了两个数学方程,以下对此做个总结,并且对此做一些通俗易懂的解释: 一、方程的总体形式 作为理性层次的描述,我们引入数学方程来描述SLAM过程,其中第一个方程叫做运动方程、第二个方程叫做观测方程,想象一下我们在研究SLAM的时候肯定需要观测机器人(无人汽车、无人机等都可以统称为机器人)的运动(画面感很强哈哈),这样很容易理解并且记忆这两个方程的名称和意义: 二、变量的含义 我们看到,这两个方程中有大量的英文字母作为变量存在其中,下面介绍一下

weixin_41855010的博客 7110

Android Studio的笔记--三元表达式、布尔运算符、与(&&) 或(||) 非(!)

三元表达式、布尔运算符、与(&&) 或(||) 非(!)

weixin_45208598的博客 1107

实操微信支付,适合第一次接通微信支付的同学

我的实际操作命令如下:就会生成图3中多出来的file文件夹,/Users/camel/cert/xxxxxx_cert/file/wechatpay_5A4xxxxxxxxxx9.pem,wechatpay_xxxxx5A4849E9.pem就是微信支付平台证书,也是程序真正需要的。•注意:我的操作说明,我是把下载好的 CertificateDownloader.jar 文件,放在了解压证书的目录里(图3)。//下面的静态参数要仔细看下面的解释,否则只会调用别人写好的方法,压根学不会0-1接入微信支付。

wjianwei666的专栏 525

详细解释SigLIP的原理,为什么有些多模态模型喜欢用他?怎么应用于机器人控制呢

详细解释SigLIP的原理,为什么有些多模态模型喜欢用他?怎么应用于机器人控制呢。

具身机器人和通用AI 1228

android位运算简单讲解

一、前言 在查看源码中,经常会看到很多这样的符号“&amp;amp;amp;”、“|”、“~”,咋一看挺高大上;仔细一看,有点懵;再看看,其实就是大学学过的再普通不过的与、或、非。今天小盆友就以简单的形式分享下,同时也是作为笔记记录,等某天突然懵逼时可以回来看看,话不多说,开始撸。 二、与或非是啥? 或许,大学上的课,在还没毕业时就还给老师了,所以我们先重温下。 1、与运算符 &amp;amp;amp; 知识点:两位同时为“1”...

江澎涌的博客 587

【GameFramework框架】二、GameFramework框架介绍

Game Framework框架是由E大(Ellan Jiang)开源的一款基于Unity的通用游戏框架。Game Framework框架提供了游戏开发中常用的框架基础模块,将基础模型进行了封装,在资源管理和资源更新方面比较完善,可以大大加大开发进程,加快开发速度,并且还在在此此处上保证产品质量。实在是代码开发、框架学习、编程进阶、居家旅行哦不对,是提升自己的最佳实践。Game Framework框架。

优快云博客专家,Unity3D高级软件工程师,《Unity 3D从入门到实战》作者。 5847

android的和与或符号,android位运算讲解与实战

目录:一、前言二、与或非是啥?三、实战四、小结五、写在最后一、前言在查看源码中,经常会看到很多这样的符号“&”、“|”、“~”,咋一看挺高大上;仔细一看,有点懵;再看看,其实就是大学学过的再普通不过的与、或、非。今天小盆友就以简单的形式分享下,同时也是作为笔记记录,等某天突然懵逼时可以回来看看,话不多说,开始撸。二、与或非是啥?或许,大学上的课,在还没毕业时就还给老师了,所以我们先重温下。...

weixin_39857174的博客 1392

【ubuntu24.04】auto remove后,重启,kernel panic ,please reboot your computer vfs unable to mount root fs

Ubuntu 24.04系统在运行auto remove后出现内核恐慌(kernel panic)无法启动,显示"VFS: unable to mount root fs"错误。该问题是由于当前内核被清除导致系统无法挂载根分区。解决步骤包括:1)尝试用GRUB菜单中的旧内核启动;2)在GRUB中临时编辑启动参数;3)使用Ubuntu启动盘进行chroot修复;4)使用Boot-Repair工具一键修复。成功启动后,需要重新安装linux-generic等元包,重建initramfs并更新

突围 1209

DFI协议时序

参数名称典型值应用场景关键影响tcmd_lat1-2个时钟周期命令与地址锁存同步地址错误风险tphy_wrlat1-2个时钟周期写操作响应速度写带宽与延迟2-3个时钟周期写操作端到端延迟系统吞吐量1-2个时钟周期连续写命令间隔信号干扰与资源冲突tphy_rdlat1-2个时钟周期读操作响应速度读带宽与延迟trddata_en由CL决定(如0.41 ns)读数据返回时间系统延迟10-20 ps写数据与命令对齐数据丢失风险<1 µs低功耗模式切换。

qq_43134430的博客 5102

Android性能优化典范(四)

作者简介:胡凯(@胡凯me),腾讯Android工程师,热爱开源与分享,维护Android官方培训课程协作项目,关注Android应用性能优化的总结与分享,推崇Android官方最佳实践。个人博客:http://hukai.me,Github:https://github.com/kesenhoo。 Android性能优化典范第4季的课程学习笔记终于在2015年的最后一天完成了(并于2016...

唐小引(Echo)的 优快云 博客。 2015

PyTorch深度学习实战(1)——神经网络与模型训练过程详解

在本节中,我们将了解传统机器学习与人工神经网络间的差异,并了解如何在实现前向传播之前连接网络的各个层,以计算与网络当前权重对应的损失值;实现反向传播以优化权重达到最小化损失值的目标。并将实现网络的所有关键组成——前向传播、激活函数、损失函数、链式法则和梯度下降,从零开始构建并训练了一个简单的神经网络。

盼小辉丶的博客 9万+

Android性能优化之运算篇

Android性能优化之运算篇 1)Intro to Compute and Memory Problems Android中的Java代码会需要经过编译优化再执行的过程。代码的不同写法会影响到Java编译器的优化效率。例如for循环的不同写法就会对编译器优化这段代码产生不同的效率,当程序中包含大量这种可优化的代码的时候,运算性能就会出现问题。想要知道如何优化代码的运算性能就需要知

大写的牛逼 1692

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Android-性能优化之运算篇

Google近期在Udacity上发布了Android性能优化的在线课程,分别从渲染,运算与内存,电量几个方面介绍了如何去优化性能,这些课程是Google之前在Youtube上发布的Android性能优化典范专题课程的细化与补充。 下面是运算篇章的学习笔记,部分内容与前面的性能优化典范有重合,欢迎大家一起学习交流! 1)Intro to Compute and Memory Probl

_风过丶花 631

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Spongy Castle性能优化:如何在低端Android设备上实现高效加密运算

Spongy Castle作为Android平台上Bouncy Castle的优化版本,专为解决Android系统自带加密库功能受限问题而设计。本文将分享在低端Android设备上实现高效加密运算的6个实用技巧,帮助开发者在资源有限的环境中平衡安全性与性能。 ### 一、选择轻量级加密算法 低端设备通常CPU性能有限,建议优先选择AES等轻量级对称加密算法。AES在Spongy Castle中经

gitblog_00833的博客 570

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Android性能优化之运算篇(二)

原文链接:http://hukai.me/android-performance-compute/ 前言 Android中的Java代码会需要经过编译优化再执行的过程。代码的不同写法会影响到Java编译器的优化效率。例如for循环的不同写法就会对编译器优化这段代码产生不同的效率,当程序中包含大量这种可优化的代码的时候,运算性能就会出现问题。想要知道如何优化代码的运算性能就需要...

skytoby 401

java trace优化_Android性能优化之运算篇

运算篇1) Intro to Compute and Memory ProblemsAndroid中的Java代码会需要经过编译优化再执行的过程。代码的不同写法会影响到Java编译器的优化效率。例如for循环的不同写法就会对编译器优化这段代码产生不同的效率,当程序中包含大量这种可优化的代码的时候,运算性能就会出现问题。想要知道如何优化代码的运算性能就需要知道代码在硬件层的执行差异。2) Slow ...

weixin_29029169的博客 137

性能优化往往成为 Android 高工的一道分水岭_android 如何避开浮点运算

在这里我和身边一些朋友特意整理了一份快速进阶为Android高级工程师的系统且全面的学习资料。涵盖了Android初级——Android高级架构师进阶必备的一些学习技能。附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题(含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。

2401_84544495的博客 838

转Android中巧妙的位运算

https://blog.youkuaiyun.com/zzp16/article/details/7956768 Android中巧妙的位运算 Android在编码的时候经常使用到位运算,这里以Intent的Flags为例。(查看Intent说明文档) 首先通过查看Flags的值,都是16进制数值代表,且只使用一位并只为1|2|4|8 (与2的次方相关),例举几个源码中对应的值: pu...

Kodulf的专栏 382

性能优化往往成为 Android 高工的一道分水岭_android 如何避开浮点运算(1)

!最后放上一个大概的Android学习方向及思路(详细的内容太多了~),提供给大家:对于程序员来说,要学习的知识内容、技术有太多太多,这里就先放上一部分,其他的内容有机会在后面的文章向大家呈现出来,不过我自己所有的学习资料都整理成了一个文档,一直在不断学习,希望能帮助到大家,也节省大家在网上搜索资料的时间来学习,也可以分享动态给身边好友一起学习!为什么某些人会一直比你优秀,是因为他本身就很优秀还一直在持续努力变得更优秀,而你是不是还在满足于现状内心在窃喜!Android架构师之路很漫长,一起共勉吧!

2401_84544495的博客 810
上一篇: Android性能优化——内存
下一篇: Android性能优化——电量
PdKingLiu
博客等级 码龄9年 89粉丝 92原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值