App.xaml 执行过程中一些心得和理解【windows Phone】
由于现在开发Windows phone, 每次看别人代码时候,对数据初始化和加载总是一头雾水,最近在网上查资料和编写程序,对App.xaml 执行过程有一定的了解,特此分享。
APP.xaml 和App.xaml.cs定义程序的入口点,初始化应用程序级别的全局资源,显示程序的UI。
我们新建一个silverlight 或者Windows phone 程序,那么会出现这样的下图的project。
1. 首先注意在app.xaml文件中的Application.ApplicationLifetimeObjects节点定义
<Application.ApplicationLifetimeObjects> <!--Required object that handles lifetime events for the application--> <shell:PhoneApplicationService Launching="Application_Launching" Closing="Application_Closing" Activated="Application_Activated" Deactivated="Application_Deactivated"/> </Application.ApplicationLifetimeObjects> |
在这里注册了程序生命周期的四个事件,Launching,Closing,Activated,Deactivated
启动程序的时候会调用Application_Launching,退出程序的时候调用Application_Closing
启动别的程序时调用Application_Deactivated,返回到本程序时调用Application_Activated
2. 在 构造函数App()里面有个InitializePhoneApplication(),要注意此函数的作用,我们来看看他是如何定义的:
private void InitializePhoneApplication() { if (phoneApplicationInitialized) // 防止二次初始化 return; // Create the frame but don't set it as RootVisual yet; this allows the splash // screen to remain active until the application is ready to render. //初始化程序框架,暂时不给RootVisual复制.这样可以让splash显示,知道在程序render完成 RootFrame = new PhoneApplicationFrame(); RootFrame.Navigated += CompleteInitializePhoneApplication; //处理程序navigationg失败 // Handle navigation failures RootFrame.NavigationFailed += RootFrame_NavigationFailed; // Ensure we don't initialize again phoneApplicationInitialized = true; //初始化完成.不再初始化 } |
在RootFrame加载完成后,把RootFrame赋值到程序的RootVisual,这样MainPage.xaml就得到显示了.
3. 为什么显示的是MainPage?
这是在WMAppMainfest.xml中的节点定义的.你可以换成任意你喜欢的page.
WMAppMainfest.xml 专门指定 Windows Phone Silverlight 应用程序相关的metadata。如图:里面有默认的NavigationPage=”MainPage.xaml”,如果你想 Navigate其他页,只需要改写自己喜欢的page就行了。
<Tasks> <DefaultTask Name ="_default" NavigationPage="MainPage.xaml"/> </Tasks> |
Silverlight程序最终会达成XAP包,这个XAP包是zip格式的文件,里面包含了程序需要的所有资源。很有意思的一件事是 进入Bin\Debug文件夹下的PhoneApptest.xap 把xap后缀改成.zip格式,然后解压,会出现一堆文件,有图片信息,音响,还有第三方的DLL等信息。
以上是上网查和自己使用过程中一点小理解,不足之处,请指正。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架