首页 > 系统 > Android > 正文

Android性能优化之内存优化

2019-11-09 17:21:07
字体:
来源:转载
供稿:网友

如何避免OOM总结

减小对象内存的占用

使用更加轻量的数据结构: 考虑使用ArrayMap/SparseArray而不是HashMap等传统数据结构. ArrayMap:相比HashMap更节省内存,因为不需要额外的对象实例来记录Maping操作. SparseArray:避免了对key与value的自动装箱(autoboxing),并且避免了装箱后的解箱.

避免在Android里使用枚举

减小Bitmap对象的内存占用: 缩放比例:根据屏幕对图片进行等比例缩放. 格式解码:选择ARGB_8888/RBG_565/ARGB_4444/ALPHA_8, 存在很大差异.使用更小的图片内存对象的重用利用:ObjectPool 复用系统自带的资源: 比如字符串、颜色、图片、动画、样式以及简单布局等.避免对象内存泄露 注意Activity的泄露: 内部类引用导致Activity内存泄露. Context被传递到其他实例中.考虑使用application Context而不是Activity Context注意临时Bitmap对象的及时回收注意监听器的注销注意缓存容器中的对象泄漏注意WebView的泄漏注意Cursor对象是否及时关闭内存使用策略优化 综合考虑设备内存阈值与其他因素设计合适的缓存大小: 例如,在设计ListView或者GridView的Bitmap LRU缓存的时候,需要考虑的点有: 应用程序剩下了多少可用的内存空间?有多少图片会被一次呈现到屏幕上?有多少图片需要事先缓存好以便快速滑动时能够立即显示到屏幕?设备的屏幕大小与密度是多少? 一个xhdpi的设备会比hdpi需要一个更大的Cache来hold住同样数量的图片。不同的页面针对Bitmap的设计的尺寸与配置是什么,大概会花费多少内存?页面图片被访问的频率?是否存在其中的一部分比其他的图片具有更高的访问频繁?如果是,也许你想要保存那些最常访问的到内存中,或者为不同组别的位图(按访问频率分组)设置多个LruCache容器。onLowMemory()与onTrimMemory()资源文件需要选择合适的文件夹进行存放谨慎使用static对象珍惜Services资源谨慎使用“抽象”编程
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表