Window Phone 开发学习
1.开发环境搭建:
a、安装win7、驱动精灵安装驱动;
b、IDE:微软为wp7开发提供了免费的开发套件,http://msdn.microsoft.com/zh-cn/windowsphone/default进行下载,在线安装只需安装尚未安装的部分,提高安装速度;可与付费的visual studio共存;
模拟器:GPU要求较高,windows7以上OS;
手机:需注册,每个账号3部手机,每部手机3个APP;需安装zune,媒体api需安装WPConnect;
c、安装Silverlight for Windows Phone Toolkit:http://silverlight.codeplex.com/
2.API:silverlight 3-4主要部分+wp7手机独有API;
3.开发语言:开发者不能使用C++、P/Invoke调用native包;
4.UI设计:早期绝对布局resource --> WCF、WinForm控件作为对象编码 --> xaml拖拽与代码结合;
xaml:实现UI设计人员与研发人员隔离开发;Expression Blend给UI设计人员使用,通过xmlns实现设计时数据;
样式style:控件外观与内容分离设计;可使用wp7系统预定义的style;
数据绑定:通过INotifyPropertyChanged实现数据类与控件显示的绑定,减少代码书写;ObservableCollection实现ListBox等多个控件的自动改变绑定;缺点:灵活性较差,可编程替代;
5.silverlight页面架构:
一个app一个frame:在App.xaml.cn中RootFrame = new PhoneApplicationFrame();
RootFrame加载多个page:page不保存状态,每次重新生成;GoBack栈中可缓存;
uri别名:App.cs中可以进行uri别名映射;
6.page导航:NavigationService
简单string类型参数传递:uri后?&带的参数,NavigationContext中获取参数;
复杂object类型参数传递:在App.cs使用静态字段;
Navigate:新生成一个页面,并作为日志压入BackStack;较慢;
BackStack:每次GoBack从BackStack中出栈一个page,较快,可以RemoveBackEntry删除其中项,但不能增加;
HyperlinkButton:内部也使用NavigationService;
7.横竖屏:SupportedOrientations
Portrait:人物肖像;
Landscape:风景画;
OrientationChanged:处理切屏事件;
8. 隔离存储:Isolated Storage
每个App有自己的独立存储空间,通过IsolatedStorageFile.GetUserStoreForApplication()获得OS提供给该App的存储命名空间;分文件IsolatedStorageFileStream、设置字典IsolatedStorageSettings两类;
每个App没有使用大小限制;受限于手机内存;App卸载后数据删除;
9. 基本控件:Control
MediaElement:播放本地/网络音视频;FMRadio.Instance收音机;
Image:显示本地/网络图片;
Button:HyperLinkButton、Button、ToggleButton开关、RepeatButton声音递增等;
Text:TextBlock、PasswordBox、TextBox;
10. 基本布局:Layout
Canvas:绝对定位;
StackPanel:小的简单布局;
Grid:整体布局;
Border:边界框;ScrollViewer:良好用户体验的滚动条;PopUp:默认隐藏的布局;
11. 自定义UserControl:ViewGroup
通过标准控件组合成的自定义控件,Silverlight Tookit是微软提供的利用基本控件组合成的自定义控件,有源代码级使用实例,使用时需在项目的Reference中手动加入;
页面切换动画:在App.cs中修改RootFrame = new TransitionFrame();在每个页面xaml中配置页面进入动画TransitionService.NavigationInTransition、页面消退动画TransitionService.NavigationOutTransition;
12.生命周期:单一职责原则
wp7本身为多任务实时OS,但限制前台只能运行一个第三方App,墓碑时App进程关闭,内存释放;wp7本身后台运行多个任务;
Tombstone:调用DeActived树立墓碑后,Wp可以杀死App,关闭进程,释放内存;可Actived唤醒App;
Launching:启动;App列表启动;
Closing:退出;主页Back键;保存持久数据到IsolatedStorage;
Actived:墓碑恢复;Back键、Back键长按选择使用墓碑恢复,从App启动列表不是墓碑机制,完全重新启动应用;可能永远不会恢复;结合Page中的OnNavigatedTo恢复数据;
DeActived:墓碑-Tombstone,圣经中上帝OS根据墓碑上的名字恢复;Wp7任务运行、Home键;保存临时数据PhoneApplicationService.Current.State[key]中;因墓碑可能永远不会恢复需要保存持久数据;结合Page中的OnNavigatedFrom使用;
10秒钟原则:操作超过10秒App会被Wp7杀死;
临时数据:TextBox中输入的文字、控件位置、光标位置等;
持久数据:用户设置等;
13. 启动器Launcher、选择器Chooser
Launcher如同火箭,调用后不返回结果;Chooser返回所选;wp7多任务;
wp7预定义的Task,task运行时App可能没有Tombstone,task返回后调用Actived、可能Launching、Chooser的Complete回调、OnNavigatedTo;PhoneCallTask例外,不调用Deactivated、Actived;
14. ListBox:较复杂的容器
ListBox.ItemTemplate:定义每个Item;
ListBox.ItemTemplate.DataTemplate:定义每个Item的组成,数据绑定;
SelectionChanged:选中事件,可以取出选中的Item;
数据更新两种方法:
手动更新、赋值:通过listBox.ItemsSource=list<ItemData>;
自动更新:结合ObservableCollection<ItemViewModel>、ItemViewModel实现INotifyPropertyChanged来自动更新;
15. 全景Panorama、枢轴Pivot:
全景Panorama:魅力香港维多利亚全景图片;Header、Item一体;建议3-5个item;大的背景图;最好不用AppBar;更适于娱乐、展示数据;一个Item可多屏显示;
枢轴Pivot:神秘西藏转金桶;Title、Header一体、与Item分离;建议2-7个item;每个item一个背景图;可用AppBar;更易编码选择Item;更适于商业、管理数据;
16. 推送通知Push Notifications:
中国2008奥委会(公司服务器)通过好莱坞名导(微软云、中介)找凤姐(wp设备、在微软云注册);公司服务器在微软云注册,微软云为每个wp分配一个uri;微软云不断询问公司服务器是否需要更新,有更新将通知推送给每个wp,wp的后台通知服务通知App;
分3种:
桌面的Tile通知:Pin到tile上的通知;
通知栏的Toast通知:wp发出通知,用户选择打开App;
后台Raw通知:App在后台接受处理通知;
17. 提交App到Marketplace:
混淆:www.preemptive.com/windowsphone7.html
检查权限:微软工具capDect生成列表;
微软验证文档:Windows Phone 7 Application Certification Requirements。
18. DeepZoom:微软提供工具制作,适用于大分辨率图像的平滑动画移动缩放;