永发信息网

在Android开发中,有哪些好的内存优化方式

答案:2  悬赏:0  手机版
解决时间 2021-01-30 20:00
  • 提问者网友:孤凫
  • 2021-01-30 01:09
在Android开发中,有哪些好的内存优化方式
最佳答案
  • 五星知识达人网友:長槍戰八方
  • 2021-01-30 01:37
我的做法是时间换空间,尽量文件化一些占用内存的数据。最典型的就是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。

  总之就是尽量时间换空间,实际这个时间是非常非常短的,用户体验内的。
全部回答
  • 1楼网友:蓝房子
  • 2021-01-30 02:41
oom: 内存泄露可以引发很多的问题: 1.程序卡顿,响应速度慢(内存占用高时jvm虚拟机会频繁触发gc) 2.莫名消失(当你的程序所占内存越大,它在后台的时候就越可能被干掉。反之内存占用越小,在后台存在的时间就越长) 3.直接崩溃(outofmemoryerror) android内存面临的问题: 1.有限的堆内存,原始只有16m 2.内存大小消耗等根据设备,操作系统等级,屏幕尺寸的不同而不同 3.程序不能直接控制 4.支持后台多任务处理(multitasking) 5.运行在虚拟机之上 5r: 本文主要通过如下的5r方法来对android内存进行优化: 1.reckon(计算) 首先需要知道你的app所消耗内存的情况,知己知彼才能百战不殆 2.reduce(减少) 消耗更少的资源 3.reuse(重用) 当第一次使用完以后,尽量给其他的使用 5.recycle(回收) 返回资源给生产流 4.review(检查) 回顾检查你的程序,看看设计或代码有什么不合理的地方。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯