【问题标题】:android recycle all bitmaps in view on view removalandroid在视图删除时回收视图中的所有位图
【发布时间】:2012-05-13 12:51:53
【问题描述】:

我的 Kindle Fire 应用程序上有一个ViewPager,每页 Activity 增加了大约 30 次浏览。一旦添加位图,就没有对位图的引用(本地语句块关闭后变量会丢失)。

当父视图被删除时,回收所有位图的最简单方法是什么?我需要这样做,因为在刷了几页之后,我的应用程序关闭了,因为没有更多的内存可以分配,因为显然未回收的位图不会释放它们的内存。

想法?

【问题讨论】:

  • 使用 'destroyItem' 从您的 ViewPager 中删除项目。
  • @Herry 我已经在这样做了,但是看着它像位图数据一样接缝的分配永远不会被释放。我发现除非您对图像进行回收,否则数据不会被释放。这听起来准确吗?
  • 已经使用一些列表视图保存图像对象,如BitmapDrawable。如果图像很大,那么你需要使用回收。
  • follow to load image in ViewPager from this stackoverflow.com/questions/477572/…
  • 位图大约为 10.5k 一张,每个“页面”上有 25-30 张。在 8 页之后,大约有 2.1-2.5 mb 的空间被吸收。我的应用程序只有在我多次滑动时才会崩溃。有没有办法对从屏幕上删除的图像进行回收?

标签: android memory-management bitmap viewgroup recycle


【解决方案1】:

您说您在应用程序中使用了 Viewpager,然后确保您在它的 PagerAdapter 适配器中使用了以下方法。

@Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            // TODO Auto-generated method stub
            ((ViewPager)container).removeView((View)object);
        }

此方法删除当前屏幕和此方法中不显示的页面

@Override
        public Object instantiateItem(ViewGroup container, int position) {
}

这个方法可以高效加载图片,具体可以参考android开发者网站displaying bitmaps

【讨论】:

  • 这不是我想要的,但必须有一些关于删除导致位图自动回收的视图的方法。也许是因为我有inPurgeable = 2
  • 遇到了同样的问题。原来我没有从 ViewGroup 中删除视图,而是回收了位图。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-02
  • 1970-01-01
  • 1970-01-01
  • 2014-08-10
  • 1970-01-01
相关资源
最近更新 更多