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等信息。
以上是上网查和自己使用过程中一点小理解,不足之处,请指正。