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

MAUI中MediaElement仅在应用关闭时释放的正确处理方式

解决方案

方法1:通过导航栈判断是否真正释放MediaElement

在ContentPage_Unloaded事件中,先检查当前页面是否还存在于导航栈内——只有当页面被彻底移除出栈(而非只是导航到其他页面)时,才执行释放操作:

private void ContentPage_Unloaded(object sender, EventArgs e)
{
    var navigationStack = Navigation.NavigationStack;
    // 仅当页面不在导航栈中时,才释放资源
    if (!navigationStack.Contains(this))
    {
        mediaElement.Handler?.DisconnectHandler();
        mediaElement.Dispose();
        mediaElement = null;
    }
}

同时,在ContentPage_Loaded事件中,确保重新创建的MediaElement被添加到页面布局容器中,并重新配置播放参数:

private void ContentPage_Loaded(object sender, EventArgs e)
{
    if (mediaElement == null)
    {
        mediaElement = new MediaElement()
        {
            IsEnabled = true,
            IsVisible = false
        };
        // 将MediaElement添加到页面根布局(示例为名为mainGrid的Grid)
        mainGrid.Children.Add(mediaElement);
        // 重新设置媒体源并启动播放
        mediaElement.Source = ...; // 替换为你的媒体源路径/Uri
        mediaElement.Play();
    }
}

方法2:监听应用终止事件统一释放

在App.xaml.cs中重写OnTerminating方法,该方法仅在应用即将完全终止时触发,在这里统一处理MediaElement的释放:

首先在首页(如MainPage)中定义释放方法:

public void ReleaseMediaElement()
{
    mediaElement.Handler?.DisconnectHandler();
    mediaElement.Dispose();
    mediaElement = null;
}

然后在App.xaml.cs中调用该方法:

protected override void OnTerminating()
{
    if (MainPage is NavigationPage navPage && navPage.CurrentPage is MainPage mainPage)
    {
        mainPage.ReleaseMediaElement();
    }
    base.OnTerminating();
}

方法3:Android平台专属处理

如果你的应用仅针对Android,可以在MainActivity.cs中重写OnDestroy方法,仅当Activity因应用关闭而非配置变更(如屏幕旋转)销毁时,释放MediaElement:

protected override void OnDestroy()
{
    // 排除配置变更导致的销毁场景
    if (!IsChangingConfigurations)
    {
        var mainPage = (MainPage)((NavigationPage)App.Current.MainPage).CurrentPage;
        mainPage.ReleaseMediaElement();
    }
    base.OnDestroy();
}

关于重新创建MediaElement无声音的说明

你之前的代码无声音,核心原因是重新创建的MediaElement未被添加到页面的可视化树中,或者没有重新设置播放源并调用Play方法。确保创建后将其加入布局容器,再重新配置播放参数即可解决。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 10:31:07