我从一个文件中读取需要创建的界面的内容的信息,文件中的信息如下所示,里面有很多个SHOWPAGE,代表一个界面,但是可能一个SHOWPAGE只是整个界面的一部分而已,需要多个SHOWPAGE拼接成一个完整的,所有界面的大小为1024*768(这个需要根据手机屏幕大小来调整布局大小),下面所显示的SHOWPAGE为第一页,然后后面的页面的显示会用到这页的一部分东西,也就是两个页相叠加,总之是多个页得组合,我目前的做法是创建一个主的layout,然后每页再创建一个小的layout,将子layout添加到主layout中,因为有大小和位置,这样每次跳到新的页就相当于,添加的layout将这块原本的layout遮住了,这样不断添加,就会导致累积越来越多的控件,占用内存,而且这些控件都是由背景图片的,由于这些图片太多,会造成outofmemory的问题,而且我回收这些图片又会有trying to use a recycle bitmap的问题。这样的问题该怎么决定,请大家帮个忙吧,很急,做的太窝火了!!!谢谢啦!!!<SHOWPAGE>
            <PAGE>
                <OBJID>ff000001</OBJID>
                <X>0</X>
                <Y>0</Y>
                <WIDTH>1024</WIDTH>
                <HEIGHT>768</HEIGHT>
                <PROPERTIES>
                    <STARTPAGE>1</STARTPAGE>
                    <NAME></NAME>
                    <BACKGROUND>background_index.png</BACKGROUND>
                </PROPERTIES>
            </PAGE>
            <STATIC>
                <OBJID>fa000001</OBJID>
                <WINDOWSNAME>Meeting</WINDOWSNAME>
                <STYLE>0</STYLE>
                <X>20</X>
                <Y>42</Y>
                <WIDTH>200</WIDTH>
                <HEIGHT>75</HEIGHT>
                <PROPERTIES>
                    <NAME>IDC_STATIC_fa000001</NAME>
                    <BACKGROUND>xxxx</BACKGROUND>
                    <Alignment>Center</Alignment>
                    <FONT font="Times New Roman" size="52" color="0xffffff"/>
                </PROPERTIES>
            </STATIC>
            <IMAGE>
                <OBJID>FB000001</OBJID>
                <WINDOWSNAME>xxxx</WINDOWSNAME>
                <STYLE>0</STYLE>
                <X>236</X>
                <Y>72</Y>
                <WIDTH>31</WIDTH>
                <HEIGHT>27</HEIGHT>
                <PROPERTIES>
                    <NAME>IDC_STATIC_fb000001</NAME>
                    <BACKGROUND>arrow_top.png</BACKGROUND>
                </PROPERTIES>
            </IMAGE>Android图片布局界面

解决方案 »

  1.   

    后来又想了个办法,感觉实施有困难就放弃了,就是把所有页都创建到子的layout中,哪页需要显示哪几个layout就让它们在相应的位置显示,不用显示的就隐藏起来,但是考虑到有些layout需要叠加,就不知道怎么办了被这个折磨的实在窝火,希望大家能帮帮忙,谢谢啦!!!
      

  2.   

    估计太高端了 [img=http://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/003/monkey/2.gif]
    压缩一下图片资源吧
      

  3.   

    LZ   不需要的layout就remove嘛 
    另外 如果是你手动加载的bitmap  记得回收   图片质量要求不高的话  可以压缩
    利用系统id引用的资源  可以不管  一般会有处理  主要是我们认为的decode的bitmap  不处理稳稳的溢出啊
      

  4.   

    我回收了的话就又会蹦出trying to use a recycle bitmap的问题
      

  5.   

    把你的设置bitmap 的地方设置为null  然后 回收, remove layout
      

  6.   

    trying to use a recycle bitmap 没有地方引用就不会出现这个问题了
      

  7.   

    LruCache<String, Bitmap>,楼主用用这个办法,图片太大的话先缩放
      

  8.   

    我回收了的话就又会蹦出trying to use a recycle bitmap的问题
    我晕  那就是逻辑问题了  既然还在使用  就不回收啊  可以放到一个数组里  保存bitmap的引用  然后固定一个大小  大于一定的数量  删掉没用的并recycle  需要的时候在创建另外   如果资源实在太多  就压缩  或者 修改  单个应用内存上限大小
      

  9.   

    我回收了的话就又会蹦出trying to use a recycle bitmap的问题
    我晕  那就是逻辑问题了  既然还在使用  就不回收啊  可以放到一个数组里  保存bitmap的引用  然后固定一个大小  大于一定的数量  删掉没用的并recycle  需要的时候在创建另外   如果资源实在太多  就压缩  或者 修改  单个应用内存上限大小
    我看了下我的图片,就几张大的,最大也只有500多K,然后大多是几K或几十K,我想了下造成溢出的可能原因是我加载太多了,基本上我重复添加一个layout的话,那么这些图片就会又增多了
      

  10.   

    我回收了的话就又会蹦出trying to use a recycle bitmap的问题
    我晕  那就是逻辑问题了  既然还在使用  就不回收啊  可以放到一个数组里  保存bitmap的引用  然后固定一个大小  大于一定的数量  删掉没用的并recycle  需要的时候在创建另外   如果资源实在太多  就压缩  或者 修改  单个应用内存上限大小
    我看了下我的图片,就几张大的,最大也只有500多K,然后大多是几K或几十K,我想了下造成溢出的可能原因是我加载太多了,基本上我重复添加一个layout的话,那么这些图片就会又增多了
    是滴  图片重复使用的话   就保存引用  避免多次创建
    而且别小看10几K  创建成bitmap  如果像素足够高的  随便达到几M  更别说500多K的(bitmap每个像素点就占8个字节)
      

  11.   

    我回收了的话就又会蹦出trying to use a recycle bitmap的问题
    我晕  那就是逻辑问题了  既然还在使用  就不回收啊  可以放到一个数组里  保存bitmap的引用  然后固定一个大小  大于一定的数量  删掉没用的并recycle  需要的时候在创建另外   如果资源实在太多  就压缩  或者 修改  单个应用内存上限大小
    我看了下我的图片,就几张大的,最大也只有500多K,然后大多是几K或几十K,我想了下造成溢出的可能原因是我加载太多了,基本上我重复添加一个layout的话,那么这些图片就会又增多了
    是滴  图片重复使用的话   就保存引用  避免多次创建
    而且别小看10几K  创建成bitmap  如果像素足够高的  随便达到几M  更别说500多K的(bitmap每个像素点就占8个字节)
    怎么保存引用?额我是菜鸟。
      

  12.   

    BitmapFactory在创建对象的时候可以用参数控制图像的质量
    decodeFileDescriptor(FileDescriptor fd, Rect outPadding, BitmapFactory.Options opts)参考以下代码Options opts = new Options();
    opts.inSampleSize = 4;
    Bitmap bm = BitmapFactory.decodeFile(imgPath, opts);
    数值越大越不清晰
      

  13.   

    BitmapFactory.Options上这么说的public int inSampleSize If set to a value > 1, requests the decoder to subsample the original image, returning a smaller image to save memory.其他一些参数估计也可以用
    没研究过希望有帮助
      

  14.   

    这样做不好吧。 你创建越来越多,不管你怎么优化压缩操作多了总会爆的, 为什么不是替换之前的呢?优化上面的都说了,就那几种方法:
    1.图片压缩(http://blog.csdn.net/sgz_china/article/details/9230347
    2. 软引用或弱引用
    3. 资源及时回收
    但是你最根本的是你这样去实现这个功能本来就有问题,要重用才行
      

  15.   

    我回收了的话就又会蹦出trying to use a recycle bitmap的问题
    我晕  那就是逻辑问题了  既然还在使用  就不回收啊  可以放到一个数组里  保存bitmap的引用  然后固定一个大小  大于一定的数量  删掉没用的并recycle  需要的时候在创建另外   如果资源实在太多  就压缩  或者 修改  单个应用内存上限大小
    我看了下我的图片,就几张大的,最大也只有500多K,然后大多是几K或几十K,我想了下造成溢出的可能原因是我加载太多了,基本上我重复添加一个layout的话,那么这些图片就会又增多了
    是滴  图片重复使用的话   就保存引用  避免多次创建
    而且别小看10几K  创建成bitmap  如果像素足够高的  随便达到几M  更别说500多K的(bitmap每个像素点就占8个字节)
    怎么保存引用?额我是菜鸟。
    创建个全局的bitmap数组  Bitmap[] bitmaps;
    当创建bitmap时,将引用存到数组里,下次需要这张图时,不要创建,直接使用引用
    另外,当你不需要某张图时(比如view隐藏或者remove等)  可以将引用删除  然后recycle  bitmap
      

  16.   

    http://blog.csdn.net/guolin_blog/article/details/9526203
      

  17.   

    我现在的做法是把有重复添加的layout,将之前添加的删掉,然后再添加,目前还没出问题,但是我在点击叠加在下面的layout的按钮的点击事件时,没有反应了,这个是为什么?
      

  18.   

    基本上知道怎么回事了,是因为我的是两层layout,而控件所在的layout不一样,我的button按下会改变图片,每个button长的也不一样,所以要确定我按下的是哪个button,这样会有查找,由于我只查找了一个layout的,所以其他的layout上的按钮就按不了,我想问下如何通过button来查找到它的所在的是哪个layout?
      

  19.   

    http://blog.csdn.net/guolin_blog/article/details/9526203