新手请教:采用viewflipper实现多图片展示,如何解决OOM的问题?

yumyumwang 2012-07-05 11:17:57
各位大侠,帮我看看吧,我的头都大了。

使用viewflipper,在XML中直接配置了30个view,用来显示图片,实现了滑动翻片。

在虚拟机上测试,已进入就报出 outofmemory的错误。

我对内存管理没什么了解,在XML中配置30个view,是不是在一上来就都加载到内存里了?

怎么释放内存,还不影响画面效果?

...全文
770 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Andytoms 2013-05-28
  • 打赏
  • 举报
回复
能不能给个完整的demo?
yumyumwang 2012-07-09
  • 打赏
  • 举报
回复
对,你说的对,我也就这样觉得。只是查了好多帖子,也没弄清楚该怎么addview。
你能详细的说说removeViewAt(), addView(),diaplay的机制吗?我这代码输出出来,竟然有两个view的index都是0,一头雾水
hvk687 2012-07-09
  • 打赏
  • 举报
回复
没有你的完整代码,不好下结论。
只是有一点要注意: viewFlipper集成自framelayout.重载了removeViewAt(), addView().
在执行这些操作的时候,同时会设置下一个要display的view.你应该是在这里出了问题
yumyumwang 2012-07-09
  • 打赏
  • 举报
回复
我选择的解决方案是,不把所有的child View 配置在XML中,改在代码中动态添加,通过删除、添加view的操作,保证viewflipper中始终存在三个 View,用来展示下一个、前一个,使当前展示的View的Index始终为1。
但是在处理享有滑动的时候,出现了问题,怎么也没弄清楚,请大侠帮忙!
代码大体如下:
this.flipper.showPrevious();
imageIndext--;
//删除后后一个
flipper.removeViewAt(2);

//创建一个子View
int resId = (int)imageAdapter.getItemId(imageIndext - 1);//
View itemLayoutPre = inflater.inflate(R.layout.itemlayout, null);
itemLayoutPre.setBackgroundResource(resId);

//添加到viewflipper的最前面
flipper.addView(itemLayoutPre,0);

运行后,结果为:子视图个数一直为3,向右滑动后不能正常显示添加的这个View,而是找到了后一个。


请大家帮我看看,这种方法错在哪里?
yumyumwang 2012-07-09
  • 打赏
  • 举报
回复
谢谢大家的帮助,我发现问题是display的位置问题。
hvk687 2012-07-09
  • 打赏
  • 举报
回复
最好看看viewflipper的源代码,我大体的看了一下,这个针对你的具体问题,你还是自己看看吧,呵呵
yumyumwang 2012-07-05
  • 打赏
  • 举报
回复
说的对,现在这种方式肯定不行,一下子都加载到内存里了
hvk687 2012-07-05
  • 打赏
  • 举报
回复
如果显示的格式是固定的,不要全部都写到xml中,因为图片很占内存。你可以用gallery widget,临时渲染。这样就不会有问题了。
TobyC 2012-07-05
  • 打赏
  • 举报
回复
采用java中的软引用来解决bitmap oom的问题比较科学。

80,349

社区成员

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

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