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

Android端点击页面屏幕返回键时如何取消MessagingCenter订阅

实现方案

你只需要区分「Push新页面导致当前页面隐藏」和「Pop当前页面导致页面销毁」两种场景,仅在Pop场景下执行取消订阅逻辑即可,有两种常用实现路径:

方案1:监听导航事件判断导航类型(通用性最强)

该方案兼容Shell、传统NavigationPage两种导航模式,同时自动覆盖硬件返回、左上角导航返回、iOS侧滑返回等所有回退场景,无需单独适配。

传统NavigationPage场景代码示例

protected override void OnAppearing()
{
    base.OnAppearing();
    // 订阅当前导航栈的导航事件
    Navigation.Navigating += OnNavigating;
}

protected override void OnDisappearing()
{
    base.OnDisappearing();
    // 取消导航事件订阅,避免内存泄漏
    Navigation.Navigating -= OnNavigating;
}

private void OnNavigating(object sender, NavigatingEventArgs e)
{
    // 仅当导航类型为Pop(当前页面被弹出栈)时,取消MessagingCenter订阅
    if (e.NavigationMode == NavigationMode.Pop)
    {
        MessagingCenter.Unsubscribe<App, string>(this, "Trolley");
    }
}

Shell导航场景代码示例

protected override void OnAppearing()
{
    base.OnAppearing();
    Shell.Current.Navigating += OnShellNavigating;
}

protected override void OnDisappearing()
{
    base.OnDisappearing();
    Shell.Current.Navigating -= OnShellNavigating;
}

private void OnShellNavigating(object sender, ShellNavigatingEventArgs e)
{
    // 判断为当前页面被弹出的回退操作时执行取消订阅
    if (e.NavigationMode == NavigationMode.Pop)
    {
        MessagingCenter.Unsubscribe<App, string>(this, "Trolley");
    }
}

方案2:自定义导航栏返回按钮(精准绑定点击操作)

如果需要严格只在点击左上角返回按钮时触发取消逻辑,可以替换系统默认返回按钮,自定义点击事件:

public 你的页面类名()
{
    InitializeComponent();
    // 隐藏系统默认返回按钮
    NavigationPage.SetHasBackButton(this, false);
    // 新增自定义返回按钮
    var backToolbarItem = new ToolbarItem
    {
        IconImageSource = "你的返回图标资源名",
        Order = ToolbarItemOrder.Primary,
        Priority = 0
    };
    backToolbarItem.Clicked += async (s, e) =>
    {
        // 先执行取消订阅
        MessagingCenter.Unsubscribe<App, string>(this, "Trolley");
        // 再执行返回逻辑
        await Navigation.PopAsync();
    };
    ToolbarItems.Add(backToolbarItem);
}

注意:该方案需要同时保留你原有的OnBackButtonPressed硬件返回逻辑,否则硬件返回不会触发取消订阅。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 04:27:01