App应用程序状态管理的主事件有四个:Launching、Deactivated、Activated 和 Closing。
这些事件里任务时间必须在10秒内完成,否则程序被终止!所以,这些事件里面最好别做网络和独立存储操作。
App被切换到后台时处于休眠状态,无法干任何事,而且可能会被系统执行逻辑删除而终止。程序被逻辑删除后,程序状态数据和页面状态数据会暂时被保留,但由于系统最多只保留5个最近应用程序的这些状态数据,所以这些状态数据并不可靠。可根据Activated事件的参数ActivatedEventArgs.IsApplicationInstancePreserved判断程序是从休眠中修复(true)还是逻辑删除后恢复(false)。
保存应用程序级状态数据(如被多个页面共享的数据 ),使用PhoneApplicationService.Current.State;保存页面的状态数据,使用PhoneApplicationPage.State。也不能因为它们不可靠而抛弃它们改为全部使用独立存储,它们的读写速度要比独立存储快的多,可在上面4个主事件里直接操作。
独立存储操作可用IsolatedStorageSettings.ApplicationSettings或者IsolatedStorageFile.GetUserStoreForApplication(),它们都没有大小限制。但是保存在IsolatedStorageSettings.ApplicationSettings的数据会一直占用着程序内存,程序正常退出时会对其自动执行Save操作。
一个应用程序的运行内存限制为150M,可以通过VS的 “调试 -> 启动WindowsPhone应用程序分析” 分析程序的性能。
一个UIElement的最大高度是2048。
模拟器的数据保存在虚拟硬盘文件.vhd和.avhd里,路径在:C:\Users\用户名\AppData\Local\Microsoft\XDE下,可通过 计算机管理 -> 磁盘管理 -> 附加VHD 把它们映射到磁盘驱动器来进行方便的读写操作。
页面跳转时附加到Uri的参数长度有限制,测试65000字节以内是没问题的,特殊小数据可以通过Convert.ToBase64String()编码后传递。
图像、json等网络文件数据在本次程序生命周期中系统会做缓存,再次请求相同网络文件url时系统会返回缓存中数据,所以如果需要刷新获取最新数据,只能在url后面加随机参数了
程序页面跳转时,几个关键函数的执行顺序如下,假设从PageA跳转到PageB:
先执行PageB的构造函数,再执行PageA的OnNavigatedFrom函数,然后执行PageB的OnNavigatedTo函数,最后触发PageB的Loaded事件。
后台定时任务每30分钟执行一次,每次执行时间必须在25秒内,最大内存限制在6M内,生效时间最长只有14天,过期后需要重新计划,连续2次崩溃后会被禁用,整个手机的后台任务最多为6个,节电模式下不会执行。