当前位置: 首页 > 知识库问答 >
问题:

Android ViewPager-OutofMemory异常使用Glide(手机和电视)

陈朗
2023-03-14
public class GalleryPagerAdapter extends PagerAdapter {

   private List<FileMetaData> mPhotos = null;
   private Context _context;
   private LayoutInflater _inflater;

   public GalleryPagerAdapter(Context context, List<FileMetaData> files) {
      _context = context;
      mPhotos = files;
      _inflater = (LayoutInflater) _context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
   }

   @Override
   public boolean isViewFromObject(View view, Object object) {
      return view == ((ImageView) object);
   }

   @Override
   public int getCount() {
      return mPhotos.size();
   }

   @Override
   public Object instantiateItem(ViewGroup container, final int position) {
      View itemView = _inflater.inflate(R.layout.photo_pager_item, container, false);
      container.addView(itemView);

      ImageView imageView = (ImageView) itemView.findViewById(R.id.imageViewPhotoDetail);

      Glide.with(_context).load(mPhotos.get(position).getUri()).placeholder(R.drawable.placeholder_image)
            /*.skipMemoryCache(true).*/.diskCacheStrategy(DiskCacheStrategy.NONE).into(imageView);

      return itemView;
   }

   @Override
   public void destroyItem(ViewGroup container, int position, Object object) {
      ImageView i = (ImageView) object;
      container.removeView(i);
   }
}
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/imageViewPhotoDetail"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

共有1个答案

楚宏胜
2023-03-14

我的问题是我得到了OutOfMemory异常。但我不知道怎么解决。我该改什么?如何回收Glide加载的图像?我需要让它也在电视(大屏幕)上工作。

你的执行没有问题。如果您得到OutofMemory异常,这通常发生在内存缓冲区已满的情况下,比方说,如果您在内存不足的设备中显示大尺寸图像。

可能的解决办法可以是:

之后,根据设备的当前分辨率从URL中获取适当的图像。

2.如果您的图像没有透明度,请尝试使用JPEG文件而不是PNGs

显然,您需要做一些额外的努力,但这将帮助您最小化'OutofMemory异常‘。但是,在此之后,您也会在许多情况下面临此异常。

 类似资料:
  • 我们正在尝试将POI 3.8用于应用程序中的excel组件,该组件必须处理大型excel文件的创建。我很高兴使用SXSSF流媒体方法,它速度快,内存占用少。然而,我无法进行数据验证,必须使用XSSF。 在XSSF中,当我尝试打开xlsx文件(大约5 MB)时,内存会急剧增加,并且大部分会导致OutOfMemory。我的问题是, > 是否可以使用SXSSF进行数据验证(如从下拉列表中选择)。这将是我

  • 如果我使用tel:我应该写国际电话代码,就像这样。 到目前为止还不错,但我找不到关于如何以“国际”方式写手机号码的信息,如果有的话。

  • 根据要求,我的应用程序首先需要读取一个大约75k-100k行和90列的Excel文件。但在XSSFWorkbook加载pkg/file时,我在第2行遇到了以下异常 线程“main”Java.lang.OutOfMemoryError中出现异常:com.sun.org.apache.xerces.internal.dom.DeferredDocumentMPL.CreateChunk中的Java堆空

  • 本文向大家介绍python使用itchat实现手机控制电脑,包括了python使用itchat实现手机控制电脑的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了python使用itchat实现手机控制电脑的具体代码,供大家参考,具体内容如下 1.准备材料 首先电脑上需要安装了python,安装了opencv更好(非必需) 如果安装了opencv的话,在opencv的python目录下找

  • 我有一个列类型为text[]的表。 我正在使用dsl和jooq以及H2。该表包含字符串值数组,如下所示: Table是使用jooq生成的java类。当我执行以下查询并打印结果时: 它把上面的表格数据打印出来。 但是当我执行时: 它给我一个例外: 它执行正常PostgreSQL,但给我错误在这个查询与H2。 我如何让它与H2一起工作?

  • 这是UnityBridge的代码,我正在使用它在Unity和原生Android之间架桥。 Unity和android之间的桥梁是成功的。当我从Unity调用openCamera方法时,相机应用程序打开,我可以拍摄照片。拍照后,图像保存到内存中的Demo文件夹中。直到这一步没有问题,但保存照片后,应用程序的力量关闭。我从cmd获得的日志如下所示:我认为在onActivityResult中获得的意图数