在进行Windows Phone 8.1 Runtime应用开发中需要注意的地方第一话:

慎重使用Local文件夹

在Silverlight应用中,我们可能会使用IsolatedStorageFile来存储app生成的本地文件,在RT应用中使用ApplicationData.Current.LocalFolder可以访问同样的路径,于是在移植过程中,为了向前兼容,很自然就会用LocalFolder代替IsolatedStorageFile。但是LocalFolder有个问题:这个路径下的文件是会被系统进行备份的[1],如果没有仔细阅读MSDN的话很容易就会忽略这一点。如果app在LocalFolder下面存储过大的文件,就很有可能造成系统无法完成应用数据的备份,后果是期间app的磁贴会变灰并且app无法启动,也可能对用户的OneDrive可用空间造成不良影响。

解决方法是使用ApplicationData.Current.LocalCacheFolder,这个路径下的文件不会被系统备份。但需要注意只有Windows Phone RT应用才有这个文件夹,Windows RT应用是无法使用的。Windows RT应用可以继续使用LocalFolder,因为桌面Windows上还没有引入应用数据备份。

慎重使用NavigationCacheMode.Disabled

将页面的NavigationCacheMode设置为NavigationCacheMode.Disabled禁用页面缓存的话会给我们减少很多处理和恢复页面状态的麻烦,但需要小心的是由于目前存在于Windows.UI.Xaml.dll中的一些bug,如果页面被GC回收,可能会导致无法catch无法恢复的c0000005异常(尤其在页面中有Pivot控件的时候)。此bug似乎在WP10中会得到(大部分?)修复。

目前的解决方法是尽量把NavigationCacheMode设置为NavigationCacheMode.Required。

MediaElement的谜之模糊

MediaElement在播放视频时(包括MP4格式或通过MediaStreamSource自定义的格式),如果视频尺寸和控件尺寸不一致、并且设置了Stretch="UniformToFill"的话,MediaElement会莫名其妙地降低视频画面清晰度,从字幕处可以很明显地看出来。

解决方法是始终设置Stretch="Fill",然后根据屏幕尺寸和视频分辨率手动修改MediaElement的Width和Height。

参考资料:
[1] Accessing app data with the Windows Runtime (Windows Runtime apps)

» 转载请注明来源及链接:未来代码研究所

Related Posts:

5 Responses to “Windows Phone 8.1应用移植手记4:一些需要注意的地方(1)”

Leave a Reply

World Line
Time Machine
Online Tools