Android内存优化 代码和bitmap

来源:互联网 发布:同步教育软件 编辑:程序博客网 时间:2024/06/06 10:42
寄存器(register)位于处理器内部,速度最快的存储场所,在程序中无法控制、
栈(stack) 存放基本类型数据和对象的引用的地方。对象本身并不放在栈中,而是放在堆中。
堆(Heap)堆用来存放有new创建的对象和数组,在堆中分配的内存,由java虚拟机的自动垃圾回收器GC来进行管理。
静态存储区域(static Field) 静态存储区域指在固定的区域存放程序运行时一直存在的数据,java在内存中划分了一个静态区域来管理一些特殊的数据变量如静态的数据变量。
常量池:java虚拟机为每个被装载的类型维护一个常量池。常量池是一个有序的集合,
定义一个变量时,会立即在栈中分配内存空间。当对象作用于结束后,这部分内存会被作为新的内存进行分配。如果使用new进行创建对象,则会在堆中为该变量分配内存空间,而该对象所在的作用域结束后,并不会立即被回收,而是等待系统GC进行回收。
而分析内存的使用情况,正是分析Heap中的内存状态。
获取内存大小的代码可以这么写:
ActivityManager manager=(ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
int heapSize=manager.getLargeMemoryClass();

获取系统内存信息
Process Stats 系统监视服务 setting-developeroptions-Process Stats
或者adb命令:adb shell dumpsys procstats
Meminfo 内存监视工具 setting-apps-running
或者adb命令:adb shell dumpsys meminfo

Bitmap 优化:
按照不同的分辨率进行图片的缩放进行相应的适配
图片裂变界面显示缩略图降低精度。
及时回收内存。在使用完bitmap之后,使用bitmap.recycle()回收。
使用图片缓存。Lrucache和DiskLruCache
代码优化:
对常量使用static修饰符
使用静态方法能提高15%的访问速度。
减少不必要的变量,即短作用域的变量
减少枚举,迭代器的使用
避免IOC、注解和反射
使用RenderScript 和 OpenGL来进行非常复杂的绘图操作
SurfaceView来替代View进行的大量和频繁的绘图操作。
使用视图缓存而不是每次使用inflate来解析视图

原创粉丝点击