android瀑布流图片无限多,内存溢出

横龙村夫 2012-07-24 07:09:02
做瀑布流的时候,一般是scrollView 里套一个LinearLyaout,LinearLyaout再套几个LinearLyaout作为列的容器,然后在最里层的LinearLayout增加ImageView,如果图片很多,就会导致内存溢出,有谁处理过这个问题吗?
...全文
3954 36 打赏 收藏 转发到动态 举报
写回复
用AI写文章
36 条回复
切换为时间正序
请发表友善的回复…
发表回复
w_yuetian 2014-09-15
  • 打赏
  • 举报
回复
可以看看这个例子 http://pan.baidu.com/s/1dD5sxTf
Trinea 2013-07-12
  • 打赏
  • 举报
回复
android图片缓存 (1).使用简单 (2).轻松获取及预取新图片 (3).可选择多种缓存算法(FIFO、LIFO、LRU、MRU、LFU、MFU等13种)或自定义缓存算法 (4).省流量性能佳(有且仅有一个线程获取图片) (5).支持不同类型网络处理 (6).可根据系统配置初始化缓存 (7).扩展性强 (8).支持队列 (9).包含map的大多数接口。 可见:http://www.trinea.cn/?p=704
ouye猿 2013-07-05
  • 打赏
  • 举报
回复
遇到同样的问题,楼主大侠是怎么解决的呢? 谢谢喽
u011011422 2013-06-17
  • 打赏
  • 举报
回复
楼主 怎么 解决的啊 你用的是那种 方法做的瀑布流啊?
zpf151702 2013-05-08
  • 打赏
  • 举报
回复
楼主大神 怎么解决的啊 求分享。
k樂k 2012-08-13
  • 打赏
  • 举报
回复
楼主怎么解决的啊,分享一下啊
横龙村夫 2012-07-31
  • 打赏
  • 举报
回复
自己搞定
横龙村夫 2012-07-27
  • 打赏
  • 举报
回复
能否提供下同步的代码
[Quote=引用 19 楼 的回复:]

引用 18 楼 的回复:

那拖动的时候,两边listview怎么同步呢
引用 17 楼 的回复:

其实还是得有ListView的方式才能满足无限量图片

你可以用多个ListView的方式并排实现,每个ListView自定义getView,可以使listView的每条记录高度不受固定限制,例如通过获取图片的尺寸高度来设置listview的高度。


每个ListVie……
[/Quote]
横龙村夫 2012-07-27
  • 打赏
  • 举报
回复
怎么个按需显示,
[Quote=引用 28 楼 的回复:]

软引用+压缩+按需显示
[/Quote]
wcplym 2012-07-27
  • 打赏
  • 举报
回复
软引用+压缩+按需显示
横龙村夫 2012-07-27
  • 打赏
  • 举报
回复
瀑布流,不知道你明白不
[Quote=引用 26 楼 的回复:]

不大理解楼主的描述

我这边同时显示7~8张大图是没有问题的

实在不行 你降低图片质量看看
[/Quote]
cintcf 2012-07-27
  • 打赏
  • 举报
回复
不大理解楼主的描述

我这边同时显示7~8张大图是没有问题的

实在不行 你降低图片质量看看
横龙村夫 2012-07-27
  • 打赏
  • 举报
回复
软引用的前提是没有view用这些图片数据,view是可以重用的
[Quote=引用 24 楼 的回复:]

解决这个问题,主要有三个方面,1软引用 2后台读取图片(如果图片是从网上读取的话) 3缓存图片到SD卡

部分代码如下(我的是ExpandableListView):

Java code

SoftReference<Bitmap> bitmap = null;//软 引用
if(iconName != null && !iconName.eq……
[/Quote]
cintcf 2012-07-27
  • 打赏
  • 举报
回复
解决这个问题,主要有三个方面,1软引用 2后台读取图片(如果图片是从网上读取的话) 3缓存图片到SD卡

部分代码如下(我的是ExpandableListView):


SoftReference<Bitmap> bitmap = null;//软 引用
if(iconName != null && !iconName.equals("")) {
childViewHolder.gameIconImage.setTag(iconName);
bitmap = new SoftReference<Bitmap>(bitmaputil.getFileImage(EVENTICONPREURLPATH + iconName));//bitmaputil.getFileImage为从sd卡上取图片

if (null == bitmap || null == bitmap.get()) {
AsyncImageLoader asyncImageLoader = new AsyncImageLoader(
context, childViewHolder.gameIconImage);
asyncImageLoader.execute(EVENTICONPREURLPATH + iconName);//如果sd卡上不存在该图片 启动后台进程从网上读取图片 同时缓存的sd卡上
} else {
childViewHolder.gameIconImage.setImageBitmap(bitmap.get());
}
}
横龙村夫 2012-07-27
  • 打赏
  • 举报
回复
是啊,自定义的veiw,兄台有没有办法
[Quote=引用 22 楼 的回复:]

你可以反编译下美丽说的apk看看,他们用的基本都是自定义的View。

为了节省内存,他们会在每次滚动后判断该图片是否还在屏幕内,不在就释放掉。
[/Quote]
  • 打赏
  • 举报
回复
你可以反编译下美丽说的apk看看,他们用的基本都是自定义的View。

为了节省内存,他们会在每次滚动后判断该图片是否还在屏幕内,不在就释放掉。
横龙村夫 2012-07-26
  • 打赏
  • 举报
回复
现在问题是LinearLayout不会重用界面,ImageView不能重用,所以对应的图片也没法释放
[Quote=引用 11 楼 的回复:]

看看是不是图片缓存的问题,图片不用了以后要及时清理缓存。
[/Quote]
oXingChen1 2012-07-26
  • 打赏
  • 举报
回复
看看是不是图片缓存的问题,图片不用了以后要及时清理缓存。
横龙村夫 2012-07-26
  • 打赏
  • 举报
回复
你是自定义一个AdapterView吗?
[Quote=引用 9 楼 的回复:]

我的问题昨天下午解决了,你使用控件来显示,我不太清楚怎么回收。

我的是几个游戏界面相互切换,而且图片也非常多,最后就是重新定义一个回收函数,在加载另外一个View的时候,循环释放之前View的Bitmap,效果不错,没有遇到这个OOM了。
[/Quote]
sada09 2012-07-26
  • 打赏
  • 举报
回复
对图片进行压缩使其变得更小,同时注意及时回收资源,本地图片还可以做个预加载的机制,希望提高一个解决思路。
加载更多回复(16)

80,492

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧