android开发中有哪些内存优化方法?

maiziedu · · 3094 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

在android开发中,Process使用的内存是有限的,一旦超出了限定,程序就会跳异常。那这个问题如何避免呢?小编搜罗了一些比较好的方法,希望可以给大家一个借鉴吧。 1、不要Memory Leak 对于OOM,其实最重要的是注意不要Memory Leak。而Memory Leak是会有多个方面会引起的,比如Drawable, RemoteViews, Receiver, Cursor,InputStream, MediaPlayer等,此外,如果使用JNI也会因为C语言或C++的代码导致Memory Leak。 除了Memory Leak,大数据量的操作也会导致OOM,比如之前其他回答提到的Bitmap,还有ListAdapter,如果在getView时处理不当,也很容易导致OOM,所以在ListAdapter时应该尽量使用convertView。 最后,可以用android.os.StrictMode以及Eclipse的MAT工具来进行OOM和Memory Leak的检测。 2、时间换空间 尽量文件化一些占用内存的数据。最典型的就是ListView中的Bitmap,将Bitmap都本地文件缓存,内存中只保留最近使用的4张图片,在使用中发现还是会偶尔出现OOM,然后我就将其改为完全的读取文件,内存中不保留图片,使用以后都自动回收,由此扩展的数据文件也同样缓存成文件。 除了Bitmap,其他的地方没想到什么能占用这么大内存,网络下载下来的数据文件需要都留在内存中吗?建议将每次Http请求下来的数据都把url转换成文件名,然后缓存成文件,在下次Http请求的时候先根据url来预读文件,暂时不用的数据就释放掉。 经常会OOM可能是在Bitmap处理的时候,比如decodeFile,在往界面上加载图片时,不用直接加载原图,可以进行缩放。一张1000*1000的图片要加载到一个100*100的ImageView上,直接加载进来大多数都会OOM,可以先用inJustDecodeBounds BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; 拿到这个图片的大小,再算好缩放比例: int scale = 0; scale = (int)(options.outHeight / (float)size); if (scale <= 0) { scale = 1; }options.inSampleSize = scale; options.inJustDecodeBounds = false; 再进行decode 总之就是尽量时间换空间,实际这个时间是非常非常短的,用户体验内的。 以上就是android开发中,比较常用的两种避免OOM的方法。在编程中,如果大家也遇到了类似问题,不妨可以试试上述方法。 相关文章:《Android中如何避免Bitmap引起的OOM问题?》http://www.maiziedu.com/group/article/6544/

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

3094 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传