Andrioid 性能优化基础

本文探讨了Android性能优化的重要性,特别是在有限的内存和CPU资源下,避免内存泄露和ANR的关键。介绍了Android的内存管理,包括内存分配、GC机制、App内存限制以及内存监控方法。接着详细阐述了性能优化的多种策略,如布局优化、绘制优化、数据结构优化、内存泄露优化以及响应速度优化,提供了一些实用技巧和工具,如使用ViewStub、避免在onDraw中创建对象、使用ArrayMap和SparseArray等。最后,讨论了如何通过MAT工具分析内存泄漏并定位问题,以及响应速度优化中的ANR日志分析方法。
摘要由CSDN通过智能技术生成

为什么要进行性能优化

Android设备作为一种移动设备,不管是在内存还是CPU的性能都受到一定的限制,无法做到像PC设备那样的超大内存和高性能CPU,鉴于这一点,就意味着android无法毫无限制的使用内存和CPU资源,过多的使用内存会导致程序内存泄露即OOM;而过多的使用CPU,一般指做大量的耗时任务,会导致设备变得卡顿甚至出现程序无响应的情况即ANR。因此,android程序的性能问题就变得异常突出,这对开发人员也提出了更高的要求。

Android的内存管理方式##

  1. Android的内存分配和回收机制
    一个进程对应一个虚拟机,可以通过dumpsys meminfo命令去查看指定的进程内存信息
    查看指定进程内存信息
    可以参考 http://blog.csdn.net/hudashi/article/details/7050897
    GC操作只有在Heap Free空间不够的情况下才会自动触发垃圾回收;
    GC操作触发时也是需要消耗CPU时间的,如果时间过长会影响程序的运行,同时在该操作触发时所有的线程都会被暂停;
  2. App内存限制机制
    每个App分配的最大内存限制,随不同设备而不同,可以通过ActivityManager的getMemoryClass方法获取到允许的最大内存;
    内存大户:图片;
    为什么要限制?原因在于Android设备是多任务系统,多个App可以同时存在,如果不做限制的话,容易导致内存被占光,导致其他APP无法运行;
  3. 切换应用时后台App清理机制
    App切换时使用的是Lru Cache算法-----缓存淘汰算法,Least Recently Used的缩写,即最近最久未使用的意思,最近使用的排在前面,最少可能的会被清理掉;
    onTrimMemory()回调,在内存变化时触发,在该方法中检测到内存不够时可以做相应处理;
  4. 监控内存的几种方法
    通过代码 Runtime的totalMemory freeMemory等方法获取
    通过Android Studio的Android Monitor工具或者Tools工具栏的Android Device Monitor可以看到相应的信息

性能优化的方法

为了解决性能问题,开发人员提出了一系列的优化方法,主要包括布局优化,绘制优化,内存泄露优化,响应速度优化,listview优化,BitMap优化,线程优化以及一些性能优化建议;

  • 布局优化
    其主体思想就是尽量减少布局文件的层级;很显然,层级减少,就意味着Android绘制的工作量少了,自然性能就高了。
    如何进行布局优化?
    首先删除布局中无用的控件和层级。
    其次有选择的使用性能较低的ViewGroup,如RelativeLayout。由于RelativeLayout的功能较复杂,其布局过程需要花费更多的CPU时间,而LinearLayout和FrameLayout是一种简单高效的布局。如果简单的Viewgroup不能实现,需要嵌套使用的方式来完成的场景下还是建议使用RelativeLayout,因为嵌套就意味着增加了布局的层级,同样会降低程序的性能;
    最后是采用标签,标签和ViewStub;
    标签主要用于布局重用
    标签一般和配合使用,可以减少布局层级
    ViewStub则提供按需加载功能,需要时才会将ViewStub的布局加载到内存,这提高了程序的初始化效率。
  • 绘制优化
    绘制优化是指View的onDraw方法要避免执行大量的操作
    首先onDraw中不要创建新的局部对象,因为ondraw可能会被频繁调用
    其次 onDraw不要做耗时任务,也不能执行成千上万的循环操作。大量的循环会抢占CPU时间片,造成View的绘制不流畅。按Google给出的标准Vi
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值