【MAUI】生命周期

.NET Multi-platform App UI (.NET MAUI) 应用通常有四种执行状态:“未运行”、“运行中”、“已停用”和“已停止”。 当应用从未运行状态转换为运行状态、从运行状态转换为已停用状态、从已停用状态转换为已停止状态、从已停止状态转换为运行状态,以及从已停止状态转换为未运行状态时,.NET MAUI 会引发 Window 类的跨平台生命周期事件。

下图显示了 .NET MAUI 应用生命周期的概述:

在这里插入图片描述
在此图中,灰色椭圆表示应用未加载到内存中。 浅蓝色椭圆表示应用在内存中。 圆弧上的文本指示 .NET MAUI 引发的并且向正在运行的应用提供通知的事件。

应用的执行状态取决于应用的历史记录。 例如,首次安装应用或启动设备时,可以将应用视为“未运行”。 启动应用后,将引发 Created 与 Activated 事件,并且应用处于“运行中”状态。 如果其他应用窗口获得焦点,则会引发 Deactivated 事件并且应用处于“已停用”状态。 如果用户切换到其他应用或返回到设备的主屏幕,以便应用窗口不再可见,则会引发 Deactivated 与 Stopped 事件,并且应用处于“已停止”状态。 如果用户返回到应用,则会引发 Resuming 事件,并且应用处于“运行中”状态。 或者,应用在运行时可能会由用户终止。 在这种情况下,应用处于“已停用”状态,然后处于“已停止”状态,将引发 Destroying 事件,并且应用处于“未运行”状态。 同样,设备可能会因资源限制而停止,进而将应用终止,此时会引发 Destroying 事件并且应用处于“未运行”状态。

此外,当引发平台生命周期事件时,.NET MAUI 会使应用得到通知。

跨平台生命周期事件

Window 类定义以下跨平台生命周期事件:

事件描述采取的操作
Created创建本机窗口后将引发此事件。 此时,跨平台窗口将具有本机窗口处理程序,但该窗口可能尚不可见。
Activated当窗口已激活且已经或将要变为焦点窗口时,将引发此事件。
Deactivated当窗口不再是焦点窗口时,将引发此事件。 但是,窗口可能依然可见。
Stopped当窗口不再可见时,将引发此事件。 无法保证应用将从此状态继续运行,因为它可能由操作系统终止。断开与任何长期进程的连接,或取消可能消耗设备资源的任何挂起请求。
Resumed当应用在被停止后继续运行时,将引发此事件。 应用首次启动时不会引发此事件,并且仅当之前已经引发 Stopped 事件时才能引发。订阅任何所需的事件,并刷新可见页面上的任何内容。
Destroying当本机窗口被销毁并解除分配时,将引发此事件。 重新打开应用时,可能会对新的本机窗口使用相同的跨平台窗口。移除已附加到本机窗口的任何事件订阅。
这些跨平台事件映射到不同的平台事件,下表显示了此映射:
活动AndroidiOSWindows
CreatedOnPostCreateFinishedLaunchingCreated
ActivatedOnResumeOnActivatedActivatedCodeActivatedPointerActivated
DeactivatedOnPauseOnResignActivationActivated (Deactivated)
StoppedOnStopDidEnterBackgroundVisibilityChanged
ResumedOnRestartWillEnterForegroundResumed
DestroyingOnDestroyWillTerminateClosed

此外,Window 类还定义了当窗口关闭或进入后台状态时在 iOS 和 Mac Catalyst 上引发的 Backgrounding 事件。 BackgroundingEventArgs 对象附带此事件,任何 string 状态都应保存到 BackgroundingEventArgs 对象的 State 属性,OS 将一直保留该属性,直到恢复窗口为止。 当窗口恢复时,状态由 IActivationState 参数提供给 CreateWindow 替代。

除了这些事件,Window 类还具有以下可替代的生命周期方法:

  • OnCreated,在引发 Created 事件时调用。
  • OnActivated,在引发 Activated 事件时调用。
  • OnDeactivated,在引发 Deactivated 事件时调用。
  • OnStopped,在引发 Stopped 事件时调用。
  • OnResumed,在引发 Resumed 事件时调用。
  • OnDestroying,在引发 Destroying 事件时调用。
  • OnBackgrounding,在引发 Backgrounding 事件时调用。

要订阅 Window 生命周期事件,请重写 App 类中的 CreateWindow 方法,以创建可在其上订阅事件的 Window 实例:

namespace MyMauiApp
{public partial class App : Application{public App(){InitializeComponent();MainPage = new MainPage();}protected override Window CreateWindow(IActivationState activationState){Window window = base.CreateWindow(activationState);window.Created += (s, e) =>{// Custom logic};return window;}}
}

或者,若要使用生命周期重写,请创建派生自 Window 类的类

namespace MyMauiApp
{public class MyWindow : Window{public MyWindow() : base(){}public MyWindow(Page page) : base(page){}protected override void OnCreated(){// Register services}}
}

然后,可以通过重写 App 类中的 CreateWindow 方法来使用 Window 派生类,以返回 MyWindow 实例。

如果设置了 App.MainPage 属性,并且 CreateWindow 方法使用接受 Page 参数的重写创建 Window
对象,则将引发 InvalidOperationException 对象。

应用生命周期

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/46780.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

new mars3d.graphic.FixedRoute({的position长度超过一百条浏览器会卡死的解决方案

问题场景描述: FixedRoute的position数据已经很精细时,会导致卡死的问题 解决方案: 1. 数据已经很精细时,可以不用autoSurfaceHeight来计算,如果非要用,可以加个minDistance: 200参数。 fixedRoute.auto…

ChatGPT 深度解析:技术驱动的智能对话

在当今科技飞速发展的时代,ChatGPT 无疑成为了最耀眼的明星之一。它以其令人惊叹的智能对话能力,引发了全球范围内的广泛关注和热议。 ChatGPT 背后的技术堪称精妙绝伦。它基于深度学习算法,通过对海量数据的学习和分析,从而能够理…

BasicSR项目(通用图像超分、修复、增强工具库)介绍

项目地址:https://github.com/XPixelGroup/BasicSR 文档地址:https://github.com/XPixelGroup/BasicSR-docs/releases BasicSR 是一个开源项目,旨在提供一个方便易用的图像、视频的超分、复原、增强的工具箱。BasicSR 代码库从2018年4月20日…

【Memcached】Memcached的工作原理

目录 ​编辑 第2章:Memcached工作原理 2.1 数据存储与访问 2.2 分布式架构 2.3 数据过期机制 第2章:Memcached工作原理 2.1 数据存储与访问 Memcached是一种键值存储系统,其中数据以键值对的形式存储。键是用于定位数据的唯一标识符&am…

libyaml库的交叉编译

目录 1.Ubuntu环境中安装libyaml库 2.交叉编译 3.success 1.Ubuntu环境中安装libyaml库 官方地址:https://pyyaml.org/wiki/LibYAML 下载路径:http://pyyaml.org/download/libyaml/yaml-0.2.5.tar.gz 2.交叉编译 官方的下载路径为/usr/local下&am…

【unity实战】使用unity制作一个红点系统

前言 注意,本文是本人的学习笔记记录,这里先记录基本的代码,后面用到了再回来进行实现和整理 素材 https://assetstore.unity.com/packages/2d/gui/icons/2d-simple-ui-pack-218050 框架: RedPointSystem.cs using System.…

PHP全功能微信投票迷你平台系统小程序源码

🔥让决策变得超简单!🎉 🚀【一键创建,秒速启动】 嘿小伙伴们,你还在为组织投票而手忙脚乱吗?来试试这款全功能投票迷你微信小程序吧!只需轻轻一点,无论是班级选举、社团…

【postgresql】pg_dump备份数据库

pg_dump 介绍 pg_dump 是一个用于备份 PostgreSQL 数据库的实用工具。它可以将数据库的内容导出为一个 SQL 脚本文件或其他格式的文件,以便在需要时进行恢复或迁移。 基本用法 pg_dump [选项] [数据库名] 命令选项 -h 或 --host:指定数据库服务器的主…

2024年大数据高频面试题(上篇)

文章目录 HDFS读流程和写流程HDFS读数据流程NameNode和Secondary NameNode工作机制FsimageEdits文件Seen_txidnamenode工作机制HA NameNode如何工作ZKFCHealthMonitorActiveStandbyElectorJouranlNode集群DataNode工作机制DataNode数据损坏压缩MapReduce工作流程MapTask工作流R…

Visual Studio远程调试工具

路径:Visual Studio安装路径/Common7/IDE/Remote Debugger/平台/msvsmon.exe。 平台有x86、x64,x64即可调试x86进程也可调试x64进程。 将平台路径下的所有文件拷贝至其他PC,运行msvsmon.exe。 工具栏选择“工具(T)”…

Ubuntu18.04安装ROS

1.添加ROS软件源 sudo sh -c echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.listcurl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc输入指令:curl -s https:…

Python中EMD的安装教程

第一步:首先安装两个包 pip install pyemd pip install EMD-signal第二步:然后,进行改名 安装完之后,找到包所在的位置,然后要将原来pyemd的文件夹名称改为PyEMD:

cleanshot Mac 上的截图工具

笔者闲来无事,最近在找一些mac上好用的工具其中一款就是cleanShot。为什么不用原有的mac自带的呢。因为相对来说编辑功能不算全面,不支持长截图。那有没有一款软件支持关于截图的好用工具呢。 所以笔者找了这款。安装包是直接安装就可使用的。请大家点赞…

Golang | Leetcode Golang题解之第237题删除链表中的节点

题目: 题解: func deleteNode(node *ListNode) {node.Val node.Next.Valnode.Next node.Next.Next }

Python中的UnboundLocalError是什么错误?如何解决?

如果代码报错UnboundLocalError, 大概率犯了以下错误: money 10000 # 当前存款def add_money(value):money valueif __name__ __main__:print(当前存款:, money)add_money(1000)print(当前存款:, money)其中,变量money表示当前存款;函数…

DialogFragment 开发手游sdk代替透明的activity

前言 各位同学大家好 有段时间没有给各位更新文章了,最近在写新的项目 之前的手游sdk 都是用透明的activity 效果有缺陷,现在我改成用这个dialogfragment 来实现 , 废话不多说我们正式开始 效果图 : 为什么要使用dialogfragment: 之前开发手游sdk的时候 我这边都是使用透…

【区块链 + 智慧政务】区块链 +ETC 下一代公路联网收费关键技术优化项目 | FISCO BCOS应用案例

2020 年,我国取消省界收费站项目完成后,随着收费模式与收费方式的变化,形成了以门架为计费单元的新收 费体系:按照车辆通行门架数,RSU 天线读取 ETC 卡、电子标签 OBU 或 CPC 卡内标识的车型信息,车型门架计…

ALlegro批量替换封装?

1,此种情况批量修改同名封装,即改前改后的封装名相同 2,首先将改好后的封装放于库路径下 3,place ----update symbols —package symbols ----选择修改的封装名 4,refresh 完成

开源PS2模拟器 PCSX2 2.0版发布 性能与功能全面升级

时隔多年之后,备受玩家喜爱的PS2模拟器PCSX2迎来了重大更新,2.0版本正式发布!此次更新包含了大量改进,几乎涵盖了模拟器各个方面,为玩家带来更流畅、更便捷的游戏体验。 下载地址: https://pcsx2.net/ 界…

Hadoop-29 ZooKeeper集群 Watcher机制 工作原理 与 ZK基本命令 测试集群效果 3台公网云服务器

章节内容 上节我们完成了: ZNode的基本介绍ZNode节点类型的介绍事务ID的介绍ZNode实机测试效果 背景介绍 这里是三台公网云服务器,每台 2C4G,搭建一个Hadoop的学习环境,供我学习。 之前已经在 VM 虚拟机上搭建过一次&#xff…