内存优化学习

1.界面优化:
Android UI渲染机制。
避免Overdraw。
优化布局层级
避免嵌套过多无用布局
“include>”标签重用Layout
ViewStub>实现View的延迟加载
merge>保证不会引入额外的层级
2.内存优化:
内存包括以下几个部分:
寄存器:速度最快的存储场所,因为寄存器位于处理器内部,在程序中无法控制。
栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中。
堆:堆内存用来存放由new创建的对象和数组。在堆中分配的内存,由Java虚拟机的自动垃圾回收器(GC)来管理。
静态存储区域:是指在固定的位置存放应用程序运行时一直存在的数据,Java在内存中专门划分了一个静态存储区域来管理一些特殊的数据变量如静态的数据变量。
常量池:JVM虚拟机必须为每个被装载的类型维护一个常量池。常量池就是该类型所用到常量的一个有序集合,包括直接常量(基本类型,String)和对其他类型、字段和方法的符号引用。
在这些概念中最容易搞错的就是堆和栈的区分。当定义一个变量,Java虚拟机就会在栈中为该变量分配内存空间,当该变量作用域结束后,这部分内存空间马上被用作新的空间进行分配。如果使用new的方式创建一个变量,那么就会在堆中为这个对象分配内存空间,即使该对象的作用域结束,这部分内存也不会立即被回收,而是等待系统GC进行回收。堆的大小随着手机的不断发展而不断变大。在程序中,可以使用如下所示的代码来获得堆的大小,所谓的内存分析,正是分析Heap中的内存状态。

ActivityManager manager=(ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
int heapSize=manager.getLargerMemoryClass();

3.获得Android系统内存信息
3.1Meminfo
3.2内存回收
3.3内存优化实例
3.3.1Bitmap优化
Bitmap是造成内存占用过高甚至是OOM(Out Of Memory)的最大威胁。下面给出一些使用Bitmap的小技巧。
由于Android系统在做资源适配的时候会对不同分辨率文件夹下的图片进行缩放来适配相应的分辨率,如果图片分辨率与资源文件夹分辨率不匹配或者图片分辨率太高,就会导致系统消耗更多的内存资源。同时,在适当的时候,应该显示合适大小的图片,例如在图片列表界面可以使用图片的缩略图thumbnails,而在显示详细图片的时候再显示原图;或者在对图像要求不高的地方,尽量降低图片的精度。
及时回收内存
一旦使用完Bitmap后,一定要及时使用bitmap.recycle()方法释放内存资源。自Android3.0之后,由于Bitmap被放置到了堆中,其内存由GC管理,就不需要进行释放了。
使用图片缓存
通过内存缓存(LruCache)和硬盘缓存(DiskLruCache)可以更好地使用Bitmap.

3.4代码优化
1)对常量使用static修饰符。
2)使用静态方法,静态方法会比普通方法提高15%左右的访问速度。
3)减少不必要的成员变量,这点在Android Lint工具上已经集成检测了,如果一个变量可以定位为局部变量,则会建议你不要定位为成员变量。
4)减少不必要的对象,使用基础类型会比使用对象更加节省资源,同时更应该避免频繁创建短作用域的变量。
5)尽量不要使用枚举、少用迭代器。
6)对Cursor、Receiver、Sensor、File等对象,要非常注意对它们的创建、回收与注册、解注册。
7)避免使用IOC框架,IOC通常使用注解、反射来进行实现,虽然现在Java对反射的效率已经进行了很好的优化,但大量使用反射依然会带来性能的下降。
8)使用RenderScript、OpenGL来进行非常复杂的绘制操作。
9)使用SurfaceView来替代View进行大量、频繁的绘图操作。
10)尽量使用视图缓存,而不是每次都执行inflate()方法解析视图。
4.使用TraceView工具优化App的性能
TraceView是一个Android下的可视化性能调查工具,它用来分析TraceView 日志。
生成方式:
debug类帮助我们生成日志文件,另一个是利用Android Device Monitor工具辅助生成日志文件。
5.使用MAT工具分析APP内存状态
MAT(Memory Analyzer Tool)工具是一个分析内存的强力助手。
5.1生成HPROF文件
首先打开Android Device Monitor工具,选择要监听的线程,并点击菜单栏中的“Update Heap”按钮。
在Heap标签中,点击“Cause GC”按钮,就会显示出当前的内存状态。
这里有一个判断当前是否存在内存泄露的小技巧:当我们不停地点击“Cause GC”按钮时,如果“data object”一栏中的“Total Size”有明显变化,就代表可能存在内存泄漏。
上面是手动查看Heap状态,下面点击菜单栏的“Dump HPROF File”按钮。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值