| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 移动开发 -> Android应用性能优化 - 开篇 -> 正文阅读 |
|
[移动开发]Android应用性能优化 - 开篇 |
????????Android技术优化日异月新,谷歌在GoogleI / O 2018 上终于发布了Android 9.0,系统性能也已经非常流畅,在我看来已远超某果(哈哈其实是因为我是穷逼用不起某果),但是由于国内各大厂商都会自己定制系统,然后就你懂的,当然不排除部分厂商确实做了一些优化,当然不包括某米,虽然我是某米粉丝,但是系统确实做的稀烂; 在如此背景之下,Android应用性能优化显得更加重要了。我总结的主要以下几个方面进行优化: ? ? ? ? 一.安装包大小优化俗称的APK瘦身,个人觉得这一条是最重要的,推荐几个个人写的自认为做到极致小的APP 最大的安装包也才28.7KB,当然都是一些功能比较单一的APP,但是比较实用;附上两个比较好用的链接: 用于解决微信上发APk文件不能安装的问题(一般都是强制要求安装QQ浏览器才能安装) 我觉得主要是资源(res目录)方面优化,可能会涉及到一些设计层面的;? 1.删除所有没有使用的资源胆子比较大的可以来;当然如果使用了一些其他语言的插件项目,这么整肯定会出事,很多插件的实现,底层都是通过字符串匹配的方式来找资源;切记如果这么整了,一定要留出充分的测试时间 ? 2.使用一套资源对于绝大对数APP来说,只需要取一套设计图就足够了。鉴于现在分辨率的趋势,建议取720p的资源,放到xhdpi目录。相对于多套资源,只使用720P的一套资源,在视觉上差别不大,很多大公司的产品也是如此,但却能显著的减少资源占用大小,顺便也能减轻设计师的出图工作量了。 3.利用ProGuard压缩代码去除无用资源,直接链接4.极致的图片压缩与webp的使用也可以使用https://tinypng.com/进行压缩 选择一些属性或使用默认的即可完成操作? 4.其他想做到极致,还有一些其他的操作,不做详细介绍了(andresguard进一步压缩与混淆资源、第三方开源库的瘦身,仅保留自己需要的部分、合理配置去除不必要的配置,仅保留中文配置等、so的优化与配置,只保留一类so(删除armable-v7包下的so,删除x86包下的so)、动态下发一些资源:字库、so、换肤包等) 5.iconfont的字体图标还有一个我很想使用但是估计只有等我自己开公司才能使用的方法,因为需要多端配合。就是三端都使用iconfont的字体图标, 简单了解下,如下图是我个人收集的和之前在某公司的(还没踢我出项目) ?大概的使用就是:UI在iconfont的官网建一个项目,然后开发的三端下载这套字体图标库放到项目对应位置并配置好;
? ? ? ? 二.内存优化1.内存溢出:OOM(Out Of Memory),是指应用系统中存在无法回收的内存或使用的内存过多,最终使得程序运行要用到的内存大于能提供的最大内存。此时程序就运行不了,系统会提示内存溢出,有时候会自动关闭软件,重启电脑或者软件后释放掉一部分内存又可以正常运行该软件,而由系统配置、数据流、用户代码等原因而导致的内存溢出错误,即使用户重新执行任务依然无法避免。 2.内存泄漏:Memory Leak,是指程序中已动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。 3.内存抖动:Memory Churn,内存抖动是因为在短时间内大量的对象被创建又马上被释放。瞬间产生大量的对象会严重占用内存区域,当达到阀值,剩余空间不够的时候,会触发GC从而导致刚产生的对象又很快被回收。即使每次分配的对象占用了很少的内存,但是他们叠加在一起会增加Heap的压力,从而触发更多其他类型的GC。这个操作有可能会影响到帧率,并使得用户感知到性能问题。 发生这些问题基本都可以使用工具(LeakCanary、Memory Profiler)检测基本都是可以从代码方面优化; ? ? ? ? 三.流畅度优化1.UI 绘制:一般就是不要在主进程去做耗时的操作,提升UI的绘制速度;?Android的绘制需要经过onMeasure、onLayout、onDraw,布局的层级越深、元素越多、耗时也就越长, 可以使用ConstraintLayout来解决 2.页面跳转/事件响应:跳转时不做任何耗时操作 3.卡顿:通过工具(BlockCanary)检测分析原因 4.崩溃:这个一般相对简单,分析日志找到对应的Exception ? ? ? ? 四.启动速度优化1.利用主题去防止出现白屏 2.尽可能减少Application的onCreate中所要做的事情 3.UI渲染优化,去除重复绘制,减少首页UI重复绘制时间,可能需要从设计的角度去解决,首页的设计在不影响产品的情况下尽量简洁 4.Android5.0以下 ? ? ? ? 五.耗损优化1.耗电:合理的使用集中定位的方式,很多只需要一个大概位置的也用了高精度的定位;传感器及时关闭、谨慎的使用屏幕唤醒Wake Lock、减少后台的不要的操作等...检测可以利用battery-historian? 2.网络:说实话现在的APP基本都不考虑这个问题了;简单说一下,就是页面切换时减少非必要刷新,非必要实时刷新的数据可以考虑使用缓存或数据库 不正之处敬请批评指正 主要参考资料: 百度百科 https://mp.weixin.qq.com/s/QVOYF2nfoWMCbM5YsxQgRQ? https://blog.csdn.net/xiangzhihong8/article/details/92800490 |
|
移动开发 最新文章 |
Vue3装载axios和element-ui |
android adb cmd |
【xcode】Xcode常用快捷键与技巧 |
Android开发中的线程池使用 |
Java 和 Android 的 Base64 |
Android 测试文字编码格式 |
微信小程序支付 |
安卓权限记录 |
知乎之自动养号 |
【Android Jetpack】DataStore |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年3日历 | -2025/3/14 20:14:38- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |