【问题标题】:Why images set by android:src in xml remain stored in heap?为什么 android:src 在 xml 中设置的图像仍然存储在堆中?
【发布时间】:2013-08-29 21:15:48
【问题描述】:

我正在开发一个带有大图像的各种片段活动的应用程序。我不想跨活动将这些图像保存在内存中,因此我使用 setImageBitmap(null) 取消绑定图像。并在 onResume() 中恢复恢复图像。 但是,如果应用程序具有完整参考,为什么必须对 xml 中设置的图像做同样的事情呢? 在离开活动时强制片段中的所有图像不保留在堆中并在从其他活动返回时强制重新创建视图的最佳方法是什么? 为什么我设置“setoffscreenPageLimit(1)”并且三个片段的图像总是留在堆中? 3 是最小值? 我正在使用 fragmentStatePagerAdapter。

谢谢!

【问题讨论】:

    标签: android memory memory-leaks fragment heap-memory


    【解决方案1】:

    使用“setoffscreenPageLimit(1)”,您告诉 ViewPager 也将下一个 Fragment 加载到内存中。我的意思是,加载当前Fragment左右的Fragment。

    并且不要尝试设置“setoffscreenPageLimit(0)”,不会起作用。

    -编辑-

    此外,您可以像这样以编程方式设置图像,而不是通过 xml 设置它们。

    ImageView imageView = (ImageView)findViewById(R.id.imageview);
    Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.icon);
    imageView.setImageBitmap(bitmap);
    

    【讨论】:

    • 感谢您的回复。我认为这是为了顺利过渡。
    • @user2660673 如果对您的问题有用,请接受/投票=D
    【解决方案2】:

    最好的方法是在不再使用时回收位图。

    if(bitmap!=null)
       {
          bitmap.recycle();
          bitmap=null;
    
       }
    

    如果您想让您的一天过得愉快,请观看此官方视频的前 20 分钟 - http://www.youtube.com/watch?v=_CruQY55HOk

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多