| |
|
开发:
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性能优化,都有哪些的,一个性能优化。 1 稳定性的优化 2 内存的优化 3 布局的优化 内存分析工具 1,Memory Monitor (mai bo 瑞 毛内特) Memory Monitor 是一款使用非常简单的图形化工具,可以很好地监控系统或应用的内存使用情况,主要有以下功能: 显示可用和已用内存,并且以时间为维度实时反应内存分配和回收情况。 2,Heap Viewer (hei pu 优窝) Heap Viewer 的主要功能是查看不同数据类型在内存中的使用情况,可以看到当前进程中的 Heap Size 的情况,分别有哪些类型的数据,以及各种类型数据占比情况。通过分析这些数据来找到大的内存对象,再进一步分析这些大对象,进而通过优化减少内存开销,也可以通过数据的变化发现内存泄漏。 3,Memory Analyzer Tool(MAT) (mai bo 瑞 ,啊 了 ruai 则 ,tu,) MAT 是一个快速,功能丰富的 Java Heap 分析工具,通过分析 Java 进程的内存快照 HPROF 分析,从众多的对象中分析,快速计算出在内存中对象占用的大小,查看哪些对象不能被垃圾收集器回收,并可以通过视图直观地查看可能造成这种结果的对象。 常见内存泄漏场景: 如果在内存泄漏发生后再去找原因并修复会增加开发的成本,最好在编写代码时就能够很好地考虑内存问题,写出更高质量的代码,这里列出一些常见的内存泄漏场景,在以后的开发过程中需要避免这类问题。 1 资源性对象未关闭。比如Cursor、File文件等,往往都用了一些缓冲,在不使用时,应该及时关闭它们。 2 注册对象未注销。比如事件注册后未注销,会导致观察者列表中维持着对象的引用。 3 类的静态变量持有大数据对象。 4 非静态内部类的静态实例。 5 Handler临时性内存泄漏。如果Handler是非静态的,容易导致 Activity 或 Service 不会被回收。 6 容器中的对象没清理造成的内存泄漏。 7 WebView。WebView 存在着内存泄漏的问题,在应用中只要使用一次 WebView,内存就不会被释放掉。 ***********除此之外,内存泄漏可监控,常见的就是用LeakCanary 第三方库,这是一个检测内存泄漏的开源库,使用非常简单,可以在发生内存泄漏时告警,并且生成 leak tarce 分析泄漏位置,同时可以提供 Dump 文件进行分析。 优化内存空间: 对象引用。强引用、软引用、弱引用、虚引用四种引用类型,根据业务需求合理使用不同,选择不同的引用类型。 稳定性优化: 提高代码质量。比如开发期间的代码审核,看些代码设计逻辑,业务合理性等。 一些性能优化的建议 (1)避免创建过多的对象 线程优化: 线程优化的思想是采用线程池: 1 避免程序中存在大量的Thread。线程池可以重用内部的线程,从而避免了线程的创建和销毁带来的性能开销, 2 同时线程池可以有效的控制线程的最大并发数,避免了大量线程因互相抢占系统资源而导致阻塞现象的发生。 3 因此在实际开发中应尽量采用线程池,而不是每次都要创建一个Thread对象。 内存泄漏场景: (1)静态变量导致的内存泄漏 (2)单例模式导致的内存泄漏 绘制优化 绘制优化指View的onDraw方法要避免执行大量的操作,这主要体现在两个方面: (1)onDraw方法中不要创建新的局部对象,因为onDraw方法可能被频繁的调用,这样一瞬间会产生大量的临时对象,这些对象不 仅占用了过多的内存,而且还会导致系统频繁的gc,降低了程序的执行效率。 (2)onDraw方法中不要执行耗时任务,也不能执行成千上万次的循环操作,大量的循环十分抢占CPU的时间片,这会造成view的绘 制过程不流畅。 |
|
移动开发 最新文章 |
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 6:50:02- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |