.NET MAUI学习笔记——1.初识.NET MAUI_初级篇

news/2024/5/2 15:40:47/文章来源:https://blog.csdn.net/BadAyase/article/details/126990824

文章目录

  • 一、 引言
  • 二、什么是.NET MAUI?
    • 1. .NET MAUI为谁服务?
    • 2. .NET MAUI是怎样工作的?
    • 3. .NET MAUI提供了什么?
      • 3.1. 设备特性的跨平台API
      • 3.2. 单一项目
      • 3.3. 热重载
  • 三、结尾

一、 引言

打算开发一款简单的Android的App,且已经用Android Studio那套环境做了一些准备工作了,但经过一段时间的学习了解,决定改用.NET来开发(一开始想用Xamarin,后进入Xamarin官网,发现推荐我使用MAUI(微软给新产品打广告嘛))。

简单谈谈,为什么最后还是选择用.NET MAUI:

  • 公司产品主要是.NET下开发的,自己也用过一段时间的WPF,相比于安卓,对.NET平台更熟悉一点。AS是用Java或kotlin开发App,.NET MAUI是C#开发App,一定程度上节省了语言成本。
  • .NET MAUI(这边或许不应该并列)相对来说是新技术产品,边学边做有利于熟悉.NET平台的新特性和丰富.NET技术栈。
  • .NET MAUI不仅可以开发Android App,它是多平台的,方便以后开发其他平台的(iOS、macOS等)程序。

不过,这些是我初步了解下来,选择它的理由。最后它是推荐还是鸡肋,还得学下去看。

下面先来了解一下.NET MAUI整体框架,然后再针对其Android部分进行学习。


二、什么是.NET MAUI?

.NET Multi-platform App UI(简称.NET MAUI)是一个跨平台框架,它用C#和XAML来创建原生的移动端和桌面端应用程序

使用.NET MAUI,你只需维护一套共享的代码库就能开发运行在Android、iOS、macOS和Windows上的应用程序。
在这里插入图片描述
.NET MAUI是开源的,它是Xamarin.Forms的进化版,从移动端扩展到了桌面场景,并且对UI控件进行了重建,以提高性能和可拓展性。如果你以前用过Xamarin.Forms来构建跨平台UI,你会注意到它与.NET MAUI有许多相似之处。当然,它们之间也有一些区别。使用.NET MAUI,你可以使用单个项目来创建多平台的应用程序。不过,如果有必要的话,你也可以添加特定平台的源代码和资源。.NET MAUI的一个关键目标是让你能够在一个代码库中实现尽可能多的应用程序逻辑和UI布局。

1. .NET MAUI为谁服务?

.NET MAUI为想要做以下事情的开发者而生:

  • 在VS的一套共享代码库中,用XAML和C#写跨平台程序。
  • 跨平台共享UI布局与设计。
  • 跨平台共享代码、测试和业务逻辑。

可以看出.NET MAUI两大特点是跨平台和使用C#&XAML开发。

2. .NET MAUI是怎样工作的?

.NET MAUI将Android、iOS、macOS和Windows 的API统一成一个API,带来了一次编写、随处运行的开发体验,同时还提供对每个原生平台的深度访问。

.NET6提供了一系列特定于平台的框架来创建App:.NET for Android、.NET for iOS、.NET for macOS以及Windows UI 3(WinUI 3)库。这些框架都可以访问同样的.NET 6基类库(Base Class Library,BCL)。这个库将底层平台的细节从你的代码中抽象出来。BCL依赖于.NET运行时来为代码提供执行环境。对于Android、iOS和macOS,该环境是由Mono(一种.NET运行时的实现)实现的。在Windows上,.NET CoreCLR提供执行环境。

尽管BCL允许在不同平台上运行的App共享通用业务逻辑,但不同的平台有不同的方法来定义App的UI,并且它们提供了不同的模型来指定UI元素如何通信与交互。你可以使用合适的特定于平台的框架(. NET for Android、.NET for iOS、.NET for macOS或WinUI 3)来为每个平台单独制作UI,但这种方法需要为每种独立的设备维护一套代码库。

.NET MAUI为移动和桌面App构建UI提供了一个(single,且就一个)框架。下图展示了.NET MAUI 应用程序架构的高层次视图:
在这里插入图片描述

可见,为了跨平台,微软做了不少工作啊,加了那么多层。

在.NET MAUI应用程序中,你编写的代码主要与.NET MAUI API(图中①)交互。然后.NET MAUI会直接使用原生平台API(③)。此外,如果需要,应用程序代码也可以直接使用平台API(②),即跳过MAUI层。

.NET MAUI 应用程序可以在PC或Mac上编写,并编译成本地程序包:

  • 使用.NET MAUI构建的Android App会从C#编译成中间语言(intermediate language,IL),然后在App启动时JIT编译成本地程序集。
  • 使用.NET MAUI构建的iOS App完全提前(AOT)从C#编译成原生ARM汇编码。
  • .NET MAUI构建的macOS App,使用Mac Catalyst(这是苹果的一种解决方案,它将你用UIKit构建的iOS App带到桌面,并根据需要增加额外的AppKit和平台API)。
  • .NET MAUI构建的Windows App使用WinUI 3库来创建针对Windows桌面的原生应用程序。

❗注意
构建iOS和macOS应用程序需要Mac。

3. .NET MAUI提供了什么?

.NET MAUI提供了一组控件,用于显示数据、启动动作、指示活动、显示集合、选择数据等等。除了控件外,.NET MAUI还提供了:

  • 用于设计页面的精致的布局引擎。
  • 用于创建丰富导航类型的多个页面类型,如drawer。
  • 支持数据绑定,以实现更优雅和可维护的开发模式。
  • 定制处理程序以增强UI元素表现方式的能力。
  • 用于访问原生设备特性的跨平台API。这些API使应用程序能访问设备自带的功能,如:GPS、加速计、电池和网络状态等。
  • 跨平台图形功能,它提供了一个绘图画布,支持绘画和绘制形状与图像、合成操作以及图形对象转换。
  • 一个单个的项目系统,使用多目标定位Android、iOS、macOS和Windows。
  • .NET热重载,你可以在应用程序运行时修改XAML和托管源代码,然后观察修改后的结果,而不需要重新构建应用程序。

3.1. 设备特性的跨平台API

.NET MAUI提供了用于原生设备特性的跨平台API。.NET MAUI提供的用于访问设备特性的功能示例包括:

  • 访问传感器,例如:设备商的加速计、指南针和陀螺仪。
  • 检查设备的网络连接状态,并检测变化。
  • 提供应用程序正在运行的设备的信息。
  • 在应用程序之间复制和粘贴文本到系统剪贴板。
  • 从设备选取文件。
  • 将数据安全地存储为键值对。
  • 利用内置的文本转换语音引擎从设备中读文本。
  • 启动基于浏览器的身份验证流,监听特定程序注册URL的回调。

3.2. 单一项目

.NET MAUI单一项目将你在开发应用程序时遇到的特定于平台的开发体验抽象为一个针对Android、iOS、macOS和Windows的单一共享项目。

.NET MAUI单一项目提供了简化的、一致的跨平台开发体验,无论目标平台是什么。.NET MAUI单一项目提供以下功能:

  • 一个目标可以是Android、iOS、macOS和Windows的单一共享项目。
  • 一个用于运行.NET MAUI应用程序的简化调试目标选择。
  • 单个项目中的共享资源文件
  • 单个应用程序清单,用于指定应用程序标题、id和版本。
  • 访问特定于平台的API和工具。
  • 单一的跨平台应用程序入口点。

.NET MAUI单一项目是通过多目标和使用.NET 6中的SDK风格项目来实现的。

3.3. 热重载

.NET MAUI还支持.NET热重载,这使你能在应用程序运行时修改托管源代码,而不需要手动暂停或断点。接着,你新编辑的代码可以应用到运行的程序中,而无需重新编译。

.NET MAUI还支持XAML热重载,这使你能在不重新编译的情况下查看运行效果。而且,原导航状态和数据会保持,使你能快速迭代UI而不丢失在应用程序中的位置。

三、结尾

我觉得这节最重要的点是了解架构,知道你在MAUI中拖一个控件,可以在各个平台运行的本质是微软对原生平台进行了封装,抽象出且实现了各种层。这其实不仅仅是MAUI跨平台的本质,其他跨平台开发环境都是这么做的,
在这里插入图片描述
其次,知道MAUI主要是用XAML和C#开发就行。

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

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

相关文章

springboot-鑫源停车场管理系统 毕业设计 -附源码 290915

springboot鑫源停车场管理系统 摘 要 21世纪时信息化的时代,几乎任何一个行业都离不开计算机,将计算机运用于停车场管理也是十分常见的。过去使用手工的管理方式对停车场进行管理,造成了管理繁琐、难以维护等问题,如今使用计算机对…

03-JVM-对象内存、执行引擎

一、创建对象的方式 new、Xxx的静态方法、XXXBuilder/XXXFactory的静态方法Class的newInstance,只能调用空参构造器,权限必须是publicConstruct的newInstance,可以调用空参、带参的构造器,权限无要求Clone(),不调用构…

瑞吉外卖(16) - 新增菜品功能开发

文章目录需求分析数据模型dish表dis flaow表代码开发搭建框架新增dishFlavor实体类新增Mapper接口DishFlavorMapper新增业务接口DishFlavorService新增业务层实现类DishFlavorServiceImpl新增控制层DishController梳理交互过程编辑CategoryControoler下拉框功能测试导入DTO编写…

香橙派Orange Pi i96 初次使用遇到的坑和解决方法+附加c# iot .net 代码实例

香橙派Orange Pi i96这个主板是香橙派最便宜的一样主板,功能也不少,我觉得可以满足我的需求,如果可以用好的话,可以做很多东西,批量买也便宜,做出来的产品,定价也不用很高,符合效益 …

4计算机网络与信息安全——软件设计师

一、七层模型 内容: 习题: 局域网不能通过三层通信 二、网络技术标准与协议 一般分为4/5层(没有明确说明,了解主要几层即可) TCP协议: DHCP协议 DNS协议 递归直接回答,迭代刨根到底 三、网络类型与拓扑类型 计算机网络按不同…

一起Talk Android吧(第三百八十五回:数据绑定-DataBinding总结)

文章目录数据绑定使用方法7.单向数据绑8.双向数据绑定9.绑定事件演示结果使用总结各位看官们,大家好,上一回中咱们说的是数据绑定-DataBinding的例子,这一回中咱们继承介绍该例子。闲话休提,言归正转,让我们一起Talk Android吧&am…

线程池概念2

线程池类图 ExecutorService:是一个线程池最基本的接口,提供了提交任务,关闭线程池这些基本的方法。 ScheduledExecutorService:扩展接口,在基础线程池的功能上又新增了任务调度的功能,可以用来定时执行任务。 线程池状态 线程…

Devtools Console 面板输入了 1+1 ,浏览器内部发生了什么?

背景 新来的实习生妹子问了一个问题:「你看 Chrome 的 Devtools 调试工具,代码写一半还没运行下面就会提示输出结果,这个咋做到的?」 咋做的?对于 Devtools 的内部执行逻辑,咱不了解,但咱也不能…

WhatsApp和WhatsApp Business之间的区别

关键词:WhatsApp、WhatsApp Business WhatsApp 无疑是一款超级方便、免费且毫不费力的即时通讯应用程序。这就是庞大的用户群的原因。对于企业来说,它也是一个超级方便、免费且不费吹灰之力的即时通讯应用程序。特别是自从 WhatsApp 推出了 WhatsApp Bus…

《MySQL DBA封神打怪之路》专栏学习大纲

《MySQL DBA封神打怪之路》专栏学习大纲 文章目录《MySQL DBA封神打怪之路》专栏学习大纲1、作者介绍2、专栏介绍3、专栏部分文章截图3.1.所有文章一栏3.2.文章内容截图4、专栏大纲学习指南4.1对数据库的初步认识4.2.四种类型的SQL语句基本使用4.3.超丰富的多表联查案例4.4.事物…

消除笔去水印怎么做?教你怎么用这些消除笔软件

在网上看到好看的照片想要用作壁纸,但是上面有水印看起来不好看怎么办?我们可以用有消除笔的软件将图片水印去除,那么消除笔去水印怎么做呢?今天的这个教程分享给你们。方法一:借助“Styler”进行去水印操作 这是一款拥…

Echarts绘制geo地图属性设置大全(一)

1、Echarts版本 "echarts": "^5.3.3", 2、基础地图绘制&#xff08;以中国地图为例&#xff09; 绘制地图需要有用于绘制地理坐标系的数据&#xff0c;如示例使用的china.js <template><div ref"mapBar" class"map-class"&…

面试之HashMap

1.初始大小&#xff1a;HashMap默认初始大小是16&#xff0c;这个默认值是可以设置的&#xff0c;如果事先知道大概的数据量有多大&#xff0c;可以通过修改默认初始大小&#xff0c;减少动态扩容的次数&#xff0c;这样会大大提高HashMap的性能 2.动态扩容&#xff1a;最大 装…

兼容性测试包含哪几类呢?

兼容性测试包含哪几类呢? (1)浏览器方面 关于浏览器的兼容性测试&#xff0c;主要是检查页面的交互、元素和样式展示是否正常。我们都知道&#xff0c;目前市面上主流的浏览器非常多&#xff0c;像&#xff1a;360、搜狗、火狐等等。 在进行测试的时候&#xff0c;由于兼容性问…

2022出海东南亚:越南电商市场现状及网红营销特点

近几年&#xff0c;东南亚整体发展态势非常好&#xff0c;加上国内市场饱和&#xff0c;不少国内企业在计划出海或已经出海东南亚。作为东南亚第二大电商市场&#xff0c;越南自然也成了香饽饽&#xff0c;越南蓬勃发展的数字经济和电商领域&#xff0c;让其成为了卖家挖掘新商…

Vue 力导图d3js 实现

PowerBI 自定义组件推荐用D3JS 实现&#xff0c;实现一个PowerBI 的力导图组件&#xff0c;为调试方便&#xff0c;先用Vue 实现一个&#xff0c;然后再移植到PowerBI 中&#xff0c;话不多说&#xff0c;上效果&#xff1a; 体验入口 上代码是最好的老师&#xff1a; <t…

【easyExcel】后端将模板文件写入流供前端下载报错,easyexcel下载模板文件出错

目录事件起因环境和工具操作过程解决办法参考内容&#xff1a;结束语事件起因 报错内容&#xff08;我主要搜索的两个错误内容点&#xff09;&#xff1a; com.alibaba.excel.exception.ExcelGenerateException: Create workbook failure 和 Caused by: org.apache.poi.openx…

kingbaseES(人大金仓)数据库语法和常用函数 以及 踩坑记录

前言 最近公司弄了个新项目&#xff0c;数据库指定使用kingbase数据库 刚开始一看这名字都不知道这是啥数据库&#xff0c;后来百度一搜&#xff0c;看到中文名字就知道了。 虽然没用过&#xff0c;但那几个国产数据库也听说过 这不&#xff0c;刚开始用&#xff0c;语法都不熟…

概率统计·概率论的基本概念【条件概率】

条件概率 定义 条件概率与积事件的区别 条件概率——在A事件发生的前提下&#xff0c;发生B 积事件——AB同时发生 性质 **注意&#xff08;3&#xff09;要在B1&#xff0c;B2……是互斥事件 &#xff08;6&#xff09;用得多 纯乐&#xff0c;自己都说了&#xff08;6&…

数智赋能,美创助力绍兴市上虞区建设医共体管理平台

什么是医共体&#xff1f; 开展县域医共体建设是深化医改的重要步骤和制度创新&#xff0c;旨在通过医共体模式&#xff0c;推动医疗卫生服务供给侧结构性改革&#xff0c;调整优化医疗资源结构布局&#xff0c;促进医疗卫生工作重心下移和资源下沉&#xff0c;提升基层服务能力…