各位大侠,帮我看看吧,我的头都大了。使用viewflipper,在XML中直接配置了30个view,用来显示图片,实现了滑动翻片。在虚拟机上测试,已进入就报出 outofmemory的错误。我对内存管理没什么了解,在XML中配置30个view,是不是在一上来就都加载到内存里了?怎么释放内存,还不影响画面效果?

解决方案 »

  1.   

    采用java中的软引用来解决bitmap oom的问题比较科学。
      

  2.   

    如果显示的格式是固定的,不要全部都写到xml中,因为图片很占内存。你可以用gallery widget,临时渲染。这样就不会有问题了。
      

  3.   

    我选择的解决方案是,不把所有的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,而是找到了后一个。
    请大家帮我看看,这种方法错在哪里?
      

  4.   

    没有你的完整代码,不好下结论。
    只是有一点要注意: viewFlipper集成自framelayout.重载了removeViewAt(), addView().
    在执行这些操作的时候,同时会设置下一个要display的view.你应该是在这里出了问题
      

  5.   

    对,你说的对,我也就这样觉得。只是查了好多帖子,也没弄清楚该怎么addview。
    你能详细的说说removeViewAt(), addView(),diaplay的机制吗?我这代码输出出来,竟然有两个view的index都是0,一头雾水
      

  6.   

    最好看看viewflipper的源代码,我大体的看了一下,这个针对你的具体问题,你还是自己看看吧,呵呵
      

  7.   

    谢谢大家的帮助,我发现问题是display的位置问题。