在.NET MAUI应用中配置应用生命周期事件

目录
  • 前言
  • 应用程序生命周期
  • 跨平台生命周期
  • 如何配置生命周期事件
  • 特定于平台的生命周期事件
    • Android
    • IOS
    • Windows
  • 参考

前言

管理应用生命周期事件是开发应用程序时最常见的要求之一。同样,有必要在跨平台应用程序(如 .NET MAUI应用)中处理应用生命周期,以提高其效率。
在这篇博客中,我将通过代码示例分享如何在 .NET MAUI 应用中配置应用生命周期事件。

应用程序生命周期

通常,应用具有不同的生命周期或状态。.NET MAUI 应用具有以下四个生命周期(执行状态):

  • 运行 (Running)
  • 未运行 (Not running)
  • 关闭 (Deactivated)
  • 停止 (Stopped)

当窗口移动到每个状态时,将触发不同的事件。

跨平台生命周期

以下是跨平台应用中提供的一些预定义生命周期事件:

  • Created: 应用从未运行状态移动到正在运行状态时发生。通常,当我们启动新窗口时。
  • Activated: 当窗口从未聚焦状态移动到聚焦状态(未聚焦 = 位于另一个窗口后面)时发生。
  • Deactivated: 当窗口移动到未聚焦状态时发生。
  • Stopped: 在窗口变为隐藏时发生。例如,当我们将其最小化时。这样,窗口就有可能被破坏。
  • Resumed: 已停止事件的后续事件,但与创建的事件不同。
  • Destroying: 在窗口被销毁和解除分配时发生。

下面是映射图,其中说明了 .NET MAUI 框架将如何映射本机事件。

如何配置生命周期事件

使用 .NET MAUI Preview 13,您可以使用 MauiAppBuilder 和 ConfigureLifecycleEvents 扩展方法轻松地在 MauiProgram 类中配置生命周期事件。此方法在 Microsoft.Maui.LifecycleEvents 命名空间中可用。

有关常见配置,请参阅以下代码示例。

using Microsoft.Maui.LifecycleEvents;
namespace MauiApp1;

public static class MauiProgram
{
    public static MauiApp CreateMauiApp()
    {
        var builder = MauiApp.CreateBuilder();
        builder
            .UseMauiApp<App>()
            .ConfigureFonts(fonts =>
            {
                fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
            }).ConfigureLifecycleEvents(app =>
            {
                //Code...
            });
        return builder.Build();
    }
}

特定于平台的生命周期事件

您还可以为自定义设置引发特定于平台的事件。下面列举了每个平台的特定事件(可用):

Android

目前,有以下 21 个特定于 Android 平台的事件可用:

  • OnActivityResult
  • OnApplicationConfigurationChanged
  • OnApplicationCreate
  • OnApplicationCreating
  • OnApplicationLowMemory
  • OnApplicationTrimMemory
  • OnBackPressed
  • OnConfigurationChanged
  • OnCreate
  • OnDestroy
  • OnNewIntent
  • OnPause
  • OnPostCreate
  • OnPostResume
  • OnRequestPermissionsResult
  • OnRestart
  • OnRestoreInstanceState
  • OnResume
  • OnSaveInstanceState
  • OnStart
  • OnStop

您可以使用编译器指令通过 AddAndroid() 扩展方法调用特定于 Android 平台的事件。
请参阅下面的代码示例。在这里,我们将调用 OnBackPressed事件以移动到上一个目标。

public static MauiApp CreateMauiApp()
    {
        var builder = MauiApp.CreateBuilder();
        builder
            .UseMauiApp<App>()
            .ConfigureFonts(fonts =>
            {
                fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
            }).ConfigureLifecycleEvents(AppLifecycle =>
            {
#if ANDROID
                AppLifecycle.AddAndroid(android => android
                   .OnBackPressed((activity) => BackPressed()));
#endif
            });
        return builder.Build();
    }

    static bool BackPressed()
    {
        return true;
    }

IOS

目前,有以下 10 个特定于 iOS 平台的事件可用:

  • ContinueUserActivity
  • DidEnterBackground
  • FinishedLaunching
  • OnActivated
  • OnResignActivation
  • OpenUrl
  • PerformActionForShortcutItem
  • WillEnterForeground
  • WillFinishLaunching
  • WillTerminate

您可以使用编译器指令通过 AddiOS() 扩展方法调用特定于 iOS 平台的事件。
请参阅下面的代码示例。在这里,我们将调用 WillEnterForeground 事件,该事件将在应用处于焦点模式时引发。

public static MauiApp CreateMauiApp()
{
  var builder = MauiApp.CreateBuilder();
  builder.UseMauiApp<App>()
  builder.ConfigureLifecycleEvents(AppLifecycle => {
      #if IOS
       AppLifecycle.AddiOS(ios => ios
          .WillEnterForeground((app) => EnteredForeground())
       );
      #endif
  });
  return builder.Build();
}
static void EnterForeground()
{
}

Windows

目前,以下 8 个特定于 Windows 平台的事件可用:

  • OnActivated
  • OnClosed
  • OnLaunched
  • OnLaunching
  • OnNativeMessage
  • OnResumed
  • OnVisibilityChanged
  • OnWindowCreated

您可以使用编译器指令通过 AddWindows() 扩展方法来调用特定于 Windows 平台的事件。
请参阅下面的代码示例。在这里,我们将调用 OnNativeMessage 事件来访问应用程序实例并删除标题栏。

public static MauiApp CreateMauiApp()
{
  var builder = MauiApp.CreateBuilder();
  builder.UseMauiApp<App>()
  builder.ConfigureLifecycleEvents(AppLifecycle => {
      #if WINDOWS
        AppLifecycle
         .AddWindows(windows =>
           windows.OnNativeMessage((app, args) => {
             app.ExtendsContentIntoTitleBar = false;
           }));
      #endif
  });
  return builder.Build();
}

关于不同平台的生命周期事件定义位置: Core > LifecycleEvents

参考

有关更多详细信息,请参阅 .NET MAUI 应用程序生命周期事件文档

到此这篇关于在.NET MAUI应用中配置应用生命周期事件的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Xamarin渲染器移植到.NET MAUI项目中

    简介 众所周知, .NET MAUI使用的是Handler处理程序, 而Xamarin使用的则是Render渲染器模式.尽管MAUI中使用了新的渲染模式, 但是仍然Xamarin中的支持Render渲染器, 这意味着如果你的项目是从Xamarin移植到MAUI当中, 大部分代码能够可以重用, 本篇文章介绍如何将Xamarin 渲染器(Render)移植到.NET MAUI项目当中. 先决条件 为了还原本次测试环境, 下面分别列举了本次测试代码移植的开发测试环境, 如下所示: IDE: Visua

  • MAUI项目中使用SnackBar与Toast通知功能

    介绍 本文中, 将介绍如何在MAUI项目当中使用SnackBar以及Toast通知功能, 通过添加 CommunityToolkit.Maui 包,来扩展MAUI功能. 首先, 创建MAUI项目, 并且安装 CommunityToolkit.Maui: <ItemGroup> <PackageReference Include="CommunityToolkit.Maui" Version="1.0.0-pre6" /> </ItemG

  • MAUI中实现构建跨平台原生控件

    简介 MAUI中使用Handler体系来处理不同平台的原生控件实现, 即对应的, 如果我们想要创建控件, 只需要创建基于不同平台的Handler即可. 那么下面主要教大家如何通过创建Handler(事件处理程序)来构建自己的控件. 开始 下面, 将通过创建一个进度条控件案例, 来演示如何在MAUI项目中创建平台控件并且使用它. 假设控件包含基础的三项功能, 进度条颜色(Foreground).进度条当前值(Value).进度条模式(Indeterminate) 1.第一步(声明控件类) 首先,

  • Three.js+React实现3D冰墩墩2022冬奥会主题

    目录 背景 效果 实现 引入资源 页面DOM结构 场景初始化 添加光源 加载进度管理 创建地面 创建冬奥吉祥物冰墩墩 创建奥运五环 TorusGeometry 圆环面 MeshLambertMaterial 非光泽表面材质 创建旗帜 创建树木 MeshDepthMaterial 深度网格材质 custromMaterial 自定义材质 创建雪花 Points 粒子 PointsMaterial 点材质 材质属性 .blending 材质属性 .sizeAttenuation Three.js 向

  • .NET跨平台应用MAUI介绍

    您可以使用 .NET 构建任何内容.这是数百万开发人员选择 .NET 作为其职业生涯的平台,以及公司为其业务进行投资的主要原因之一.通过 .NET 5,我们开始了统一 .NET 平台的旅程,将 .NET Core 和 Mono/Xamarin 整合在一个基类库 (BCL) 和工具链 (SDK) 中. 当我们考虑在统一的 .NET 中构建设备应用程序的外观时,我们看到许多设备跨多个平台使用,从 Android 和 iOS 到 Windows 和 macOS.为了满足这一需求,我们很高兴地宣布一个新

  • 在.NET MAUI应用中配置应用生命周期事件

    目录 前言 应用程序生命周期 跨平台生命周期 如何配置生命周期事件 特定于平台的生命周期事件 Android IOS Windows 参考 前言 管理应用生命周期事件是开发应用程序时最常见的要求之一.同样,有必要在跨平台应用程序(如 .NET MAUI应用)中处理应用生命周期,以提高其效率.在这篇博客中,我将通过代码示例分享如何在 .NET MAUI 应用中配置应用生命周期事件. 应用程序生命周期 通常,应用具有不同的生命周期或状态..NET MAUI 应用具有以下四个生命周期(执行状态): 运

  • Android开发中Activity的生命周期及加载模式详解

    本文给大家介绍Activity的生命周期,如果大家学习过iOS的小伙伴的话,Activity的生命周期和iOS中ViewController的生命周期非常类似.生命周期,并不难理解.一个人的生命周期莫过于生老病死,花儿的生命周期就是花开花谢了.在Android中Activity的生命周期莫过于Activity的创建到消亡的过程了.本篇博客就会介绍Activity生命周期中的不同阶段,通过实例的形式来窥探一下Activity的生命周期.搞明白Activity的生命周期是至关重要的,因为只有搞明白每

  • 一文搞懂Spring中Bean的生命周期

    目录 一.使用配置生命周期的方法 二.生命周期控制——接口控制(了解) 小结 生命周期:从创建到消亡的完整过程 bean声明周期:bean从创建到销毁的整体过程 bean声明周期控制:在bean创建后到销毁前做一些事情 一.使用配置生命周期的方法 在BookDaoImpl中实现类中创建相应的方法: //表示bean初始化对应的操作 public void init(){ System.out.println("init..."); } //表示bean销毁前对应的操作 public v

  • Android中的Activity生命周期总结

    概述 有图有真相,所以先上图: 上图是从Android官网截下的Activity的生命周期流程图,结构非常清晰,它描述了Activity在其生命周期中所有可能发生的情况以及发生的先后顺序,下面就将结合此图详细介绍一下Activity的生命周期. Activity四大基本状态 Activity生命周期一般分为四个基本状态,分别是活动状态(running),暂停状态(paused),停止状态(stopped)和死亡状态. 1.活动状态(running) 活动状态一般是指该Activity正处于屏幕最

  • Android开发中Widget的生命周期实例分析

    本文实例分析了Android开发中Widget的生命周期.分享给大家供大家参考,具体如下: Widget是android中桌面小控件,创建时必须继承AppWidgetProvider,AppWidgetProvider其实就是继承了BroadcastReceiver的Receiver的一种,widget有以下几个生命周期方法: 1.onEnabled方法:此方法在Widget第一次被创建的时候调用,并且只调用一次,此方法中常放入初始化数据,服务的操作. 2.onReceive方法:通Broadc

  • 详解Spring 中 Bean 的生命周期

    前言 这其实是一道面试题,是我在面试百度的时候被问到的,当时没有答出来(因为自己真的很菜),后来在网上寻找答案,看到也是一头雾水,直到看到了<Spring in action>这本书,书上有对Bean声明周期的大致解释,但是没有代码分析,所以就自己上网寻找资料,一定要把这个Bean生命周期弄明白! ​ 网上大部分都是验证的Bean 在面试问的生命周期,其实查阅JDK还有一个完整的Bean生命周期,这同时也验证了书是具有片面性的,最fresh 的资料还是查阅原始JDK!!! 一.Bean 的完整

  • Node8中AsyncHooks异步生命周期

    Async Hooks 是 Node8 新出来的特性,提供了一些 API 用于跟踪 NodeJs 中的异步资源的生命周期,属于 NodeJs 内置模块,可以直接引用. const async_hooks = require('async_hooks'); 这是一个很少使用的模块,为什么会有这个模块呢? 我们都知道,JavaScript在设计之初就是一门单线程语言,这和他的设计初衷有关,最初的JavaScript仅仅是用来进行页面的表单校验,在低网速时代降低用户等待服务器响应的时间成本.随着Web

  • Spring中bean的生命周期之getSingleton方法

    Spring中bean的生命周期 要想讲清楚spring中bean的生命周期,真的是不容易,以AnnotationConfigApplicationContext上下文为基础来讲解bean的生命周期,AnnotationConfigApplicationContext是基于注解的上下文,使用XML的方式现在很少见,所以以此上下文为基础,使用XML的上下文ClassPathXmlApplicationContext的步骤和AnnotationConfigApplicationContext类似.

  • Java中Servlet的生命周期

    目录 init() service() doGet() doPost() destroy() 方法 架构 Servlet从创建直到毁灭的整个过程: Servlet 初始化后调用 init () 方法 Servlet 调用 service() 方法来处理客户端的请求 Servlet 销毁前调用 destroy() 方法 最后,Servlet 是由 JVM 的垃圾回收器进行GC init() 只调用一次.在第一次创建 Servlet 时被调用,在后续每次用户请求时不再调用.因此,它是用于一次性初始化

  • JavaWEB中Servlet的生命周期详解

    目录 一.什么是Servlet 生命周期? 二.Servlet 是由谁来维护的? 三.Servlet 对象 是什么时候创建的? 四.测试 Tomcat 什么时候被销毁? 总结 一.什么是Servlet 生命周期? Servlet 对象什么时候被创建? Servlet对象什么时候被销毁? Servlet 对象创建了几个? Servlet 对象的声明周期表示:Servlet 对象从出生到销毁的过程是怎样的 二.Servlet 是由谁来维护的? Servlet 是由 Tomcat 服务器全权负责的,程

随机推荐