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

MAUI CollectionView遇Java.Lang.RuntimeException:已回收Bitmap使用问题求助

MAUI CollectionView 安卓Bitmap回收崩溃问题解决建议

问题核心

你遇到的Canvas: trying to use a recycled bitmap异常,本质是CollectionView的视图复用机制导致的:当刷新列表或滚动时,被复用的旧视图仍持有已被Android系统回收的Bitmap引用,而ListView的视图管理逻辑对Bitmap生命周期的处理更宽松,因此未出现该问题。

解决方案

方案1:将Android Bitmap转为MAUI原生ImageSource(推荐)

直接传递Android原生Bitmap到共享层会导致生命周期管理失控,转为MAUI的StreamImageSource可让框架自行处理资源释放:

  1. 修改Android平台LauncherService的图标获取逻辑,将Bitmap转为Stream并封装为ImageSource:
    public ImageSource GetAppIcon(PackageInfo packageInfo)
    {
        var appIconDrawable = packageInfo.ApplicationInfo.LoadIcon(PackageManager);
        var originalBitmap = ((BitmapDrawable)appIconDrawable).Bitmap;
        
        var stream = new MemoryStream();
        originalBitmap.Compress(Bitmap.CompressFormat.Png, 100, stream);
        stream.Position = 0;
        
        return ImageSource.FromStream(() => stream);
    }
    
  2. 在共享代码的AppItem类中,将图标属性类型改为ImageSource,直接绑定到XAML中Image控件的Source属性。MAUI会自动管理该资源的生命周期,彻底避免Bitmap回收冲突。

方案2:复制Bitmap脱离系统资源池

如果暂时不想修改属性类型,可通过创建Bitmap副本,让列表项持有独立的Bitmap实例,避免被系统回收:

public Bitmap GetAppIcon(PackageInfo packageInfo)
{
    var appIconDrawable = packageInfo.ApplicationInfo.LoadIcon(PackageManager);
    var originalBitmap = ((BitmapDrawable)appIconDrawable).Bitmap;
    // 创建副本,脱离系统的Bitmap资源池
    return Bitmap.CreateBitmap(originalBitmap);
}

⚠️ 注意:此方案会增加内存占用,适合应用数量较少的场景。

方案3:临时关闭CollectionView视图复用(排查用)

修改CollectionView的缓存策略为RetainElement,关闭视图复用(会降低滚动性能,仅作排查验证):

<CollectionView CachingStrategy="RetainElement" ItemsSource="{Binding AppsForCollectionView}">
    <!-- 你的ItemTemplate -->
</CollectionView>

如果修改后崩溃消失,即可确认是视图复用导致的旧Bitmap引用问题。

额外优化点

  • 刷新列表时,在UI线程操作ObservableCollection,并优先清空现有集合再添加新项,避免替换集合实例导致的绑定异常:
    MainThread.BeginInvokeOnMainThread(() =>
    {
        AppsForCollectionView.Clear();
        foreach (var app in newAppList)
        {
            AppsForCollectionView.Add(app);
        }
    });
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 00:50:09