You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android开发新手求助:如何解决OutOfMemoryError异常?

针对长列表Bitmap内存问题的临时解决方案
  • Bitmap压缩优化:加载缩略图时不要直接使用原图,借助BitmapFactory.Options设置inSampleSize压缩图片,比如设为2可将宽高各缩小一半,内存占用降至原有的1/4;同时搭配inPreferredConfig = Bitmap.Config.RGB_565,相比默认的ARGB_8888能节省一半内存。示例代码:

    BitmapFactory.Options options = new BitmapFactory.Options();
    options.inSampleSize = 2; // 根据实际需求调整数值
    options.inPreferredConfig = Bitmap.Config.RGB_565;
    Bitmap thumbnail = BitmapFactory.decodeFile(imagePath, options);
    
  • 列表视图复用+Bitmap主动回收:确保列表使用RecyclerView或优化后的ListView,在onViewRecycled方法中回收不可见项的Bitmap:

    @Override
    public void onViewRecycled(ViewHolder holder) {
        super.onViewRecycled(holder);
        if (holder.imageView.getDrawable() instanceof BitmapDrawable) {
            BitmapDrawable drawable = (BitmapDrawable) holder.imageView.getDrawable();
            drawable.getBitmap().recycle();
            holder.imageView.setImageDrawable(null);
        }
    }
    
  • 本地缓存缩略图:首次加载原图并压缩后,将生成的缩略图保存到本地文件,后续直接加载该小文件,避免重复压缩原图。

  • 关闭额外内存占用项:临时关闭LeakCanary等内存检测工具;测试阶段若开启了android:debuggable="true",可暂时改为false减少内存消耗。

  • 延迟Bitmap加载:监听列表滚动状态,仅在列表停止滚动时加载当前可见项的缩略图,滚动过程中显示占位图,避免滚动时大量Bitmap同时加载。

注:以上均为临时缓解方案,长期来看仍需实现数据库分页加载,并配合Glide、Picasso等图片加载库自动处理缓存与内存管理,但当前可先通过这些小改动快速改善问题。

内容的提问来源于stack exchange,提问作者saas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 17:38:15