Android性能优化之:内存优化

时间:2022-12-09 18:33:09

为何要内存优化?

       智能手机会有自己的内存,像电脑内存一样,用来装载要运行的程序。虽说现在的手机动辄都能有1GB或2GB的内存,但是毕竟Android系统允许每个APP占用的内存是有限的,否则内存满了会触发OOM异常,即Out of Memory Exception。所以,开发APP应当将效率发挥到极致,精益求精,满足用户体验。


那内存涉及的方面有哪些呢?

  • 寄存器。寄存器是存取速度最快的场所,但是我们开发的程序是无法控制到的,对我们来说是完全透明的。
  • 栈。跟java一样,基本的数据类型(int、double、float、boolean等)和对象的引用是放在栈里面得。
  • 堆。堆内存用来存放new出来的实体对象和数组。这里面分配的内存由java虚拟机的GC机制来管理。
  • 静态存储区域。静态存储区域是指在固定位置存放应用程序运行时一直存在的数据,用来管理一些特殊的数据变量。
  • 常量池。常量池是就是为每个被装载的类型维护的一个常量池。常量池就是该类型所用到常量的一个有序的集合。

内存优化涉及哪几方面呢?
  • Bitmap加载优化。这方面的内存可以看回我的一篇博客:Android性能优化之:Bitmap加载优化。另外,我们还可以写一个ImageLoader来对图片进行缓存,这个思想不仅适用于图片,还适用于要经常加载的一些文件。
  • ListView加载优化。随着ListView不断下滑更新,数据不断的加载,前面离当前页面较远的部分数据会越来越多,对于一些低端机来说,也会很容易造成OOM异常。对于前面离得当前页面较远部分的数据我们可以适当“砍掉”,比如我用一个List来装载数据的,我目前显示的是第1000个以后的item,就没必再保留前900多个数据,我们可以remove掉前面700多或800多个数据。
  • 代码优化。创建一个类对象大约要消耗15字节的内存,从代码上,我们也可以对内存进行优化,以上是我看书总结的一些小技巧:
1.使用静态方法,静态方法会比普通方法提供15%左右的访问速度。
2.尽量不要使用枚举、少用迭代器。
3.对Cursor、Receiver、Sensor、File等对象,要非常注意对它们的创建、回收与注册、截注册。
4.减少不必要的对象,使用基础类库会比使用对象更加节省资源,同时更应该避免频繁创建短作用域的变    量。
5.如果一个变量可以定义为局部变量就不要定义为全局变量。
6.避免使用IOC框架,因为大量使用反射会带来性能的下降。
7.使用RenderScript、OpenGL来进行非常复杂的绘图。
8.使用SurfaceView来替代View进行大量、频繁的绘图操作。
9.尽量使用视图缓存,而不是每次都执行inflate()来解析视图。

内存监视:
Android Studio自带一个叫Memory Monitor的工具,可以监视内存。通过点击Android Studio右下角的“Memory Monitor”标签,打开“Memory Monitor”工具。