| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 移动开发 -> 安卓一些优化点 -> 正文阅读 |
|
[移动开发]安卓一些优化点 |
启动优化cpu time 和wall time 是profiler 和 systrace中重要的指标 cputime : 代码消耗cpu的时间。walltime : 代码执行时间 需要以cputime 来作为优化的一个方向 使用idleHandler 来实现cpu空闲时间执行耗时任务 黑科技 :类预先加载,在Multidix.index方法后起了一个线程,使用class.forname的方式来触发预先加载 内存优化1.减少不必要的内存开销 如AutoBoxing,使用TraceView查看耗时,如果发现调用了大量的integer.value,就说明发生了AutoBoxing。 ? 避免创建不必要的对象 如拼接字符串时使用StringBuilder 2.内存复用;资源复用,视图复用,对象池,bitmap对象复用 3.使用最优的数据类型 4.使用 IntDef和StringDef 替代枚举类型 5.图片内存优化 ? ? ? 设置位图规格 显示小图片使用RGB——565 ? ? 位图缩放 inSampleSize ? ? 位图复用 inBitmap ? ? 图片放置优化,放在xxhdpi下在低分辨率设备中只会压缩不会增大内存 ? ? item被回收不可见时释放对图片的引用 6.自定义view中? onDraw方法不要创建对象 7.在app可用内存过低时主动释放内存,onLowMemory中释放图片缓存、静态缓存 其他一些? ? ? ? 尽量使用static final优化成员变量 ;使用增强for循环语法;基本数据类型比封装类型有效 int 和Integer;适当采用软饮用和弱引用; ? ? ? 使用静态内部类代替内部类;使用内存缓存和磁盘缓存 对于内存优化,一般都是通过使用MAT等工具来进行检查和使用LeakCanary等内存泄漏监控工具来进行监控,以此来发现问题,再分析问题原因,解决发现的问题或者对当前的实现逻辑进行优化,优化完后再进行检查,直到达到预定的性能指标。 避免内存抖动: 避免在循环体内创建对象,ondraw方法会被频繁调用,不应该频繁创建对象 大量使用bitmap时,试着缓存在数组或容器中实现 服用 能复用的对象,使用对象池复用起来 布局优化1.使用异步inflate的方式,即AsyncLayoutInflater,对layout异步加载,然后通过handler将view发送到主线程来使用 2.使用X2C的方式,核心原理就是使用xml编写布局,编译时会用apt方式将xml转换为java的方式,省去了IO加载XML布局的耗时过程,也没有反射创建对象的损耗 3.可以使用约束布局来减少嵌套的层级,减少重绘次数。 卡顿优化使用systrace查看卡顿周期内的cpu状况,结合代码对这个模块代码重构,进行异步和延迟处理。 同时,使用android的消息处理机制,在loop中有一个mLogging对象,在分发message前后被调用,通过监听mlogging来实现自动化检测 通过aop对常见的耗时代码进行Hook,然后对一段时间内获取到的数据进行分析 apk瘦身1.代码混淆,统一三方库,无用代码删除 2.无用资源删除,资源混淆 3.只保留armeabi So 可以兼容别的cpu架构 4.推进插件化 网络优化首先需建立线上的网络监控,主要为质量监控和流量监控 质量监控: 请求成功率,每步的耗时,比如dns解析时间,建立连接的时间,接口失败的原因,然后在合适的时间上报给服务器 流量监控: 流量消耗情况,上传到apm后台 1.数据缓存来减少流量消耗,有些配置信息,离线包等接口加上版本号,实现增量更新 2.使用缩略图,用户点击再去加载大图 电量优化power_profile文件来确定耗电量 Battery Historian 电量分析工具,可以获取各个模块的耗电信息,例如GPS、蓝牙等 只能在线下使用 webveiw优化1.预加载webview 2、asset存放离线包 3.拦截资源文件下载,使用本地的替换 |
|
移动开发 最新文章 |
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图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 22:27:24- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |