App.xaml 执行过程中一些心得和理解【windows Phone】

由于现在开发Windows phone, 每次看别人代码时候,对数据初始化和加载总是一头雾水,最近在网上查资料和编写程序,对App.xaml 执行过程有一定的了解,特此分享。

APP.xaml 和App.xaml.cs定义程序的入口点,初始化应用程序级别的全局资源,显示程序的UI。

我们新建一个silverlight 或者Windows phone 程序,那么会出现这样的下图的project。

clip_image001

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?

clip_image002

这是在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等信息。

以上是上网查和自己使用过程中一点小理解,不足之处,请指正。

posted @ 2011-11-08 20:06  OMG! 日记  阅读(3747)  评论(5编辑  收藏  举报