WindowsPhone7开发实例——构建高质量的WP7应用程序李政-小米科技天翼空间应用工厂专家讲坛Agenda产品定义应用程序架构MVVM单元测试用户界面PanoramaVSPivot站在巨人的肩膀上性能启动性能数据库性能UI性能内存泄露错误报告应用程序架构用户界面错误报告产品定义性能产品定义应用程序架构用户界面错误报告产品定义性能方向比努力更重要4腾讯:即时通讯李彦宏:搜索马云:电子支付成功的产品强大的产品经理强大的工程师成功的产品高质量的产品6应用程序架构应用程序架构用户界面错误报告产品定义性能传统的Silverlight应用程序架构8ViewModel(domainobjects)XAML(UIlayout)CodeBehindupdates,mayobserve代码示例9XAML:windowlayout+namedcontrolsStackPanelTextBoxx:Name=“City”/ComboBoxx:Name=“CountryList”SelectionChanged=…//StackPanelCodebehind:eventhandlersandmanipulatingthecontrolsvoidCountryList_SelectionChanged(…){City.Text=GetCity(CountryList.SelectedItemasCountry);}MVVM10ModelViewSomethingController?Presenter?CodeBehind?MVVM(Model-View-ViewModel)11Model(domainobjects)View(input,output)ViewModel(UIstate)updates,mayobserveDataBindingView.DataContext=ViewModel;深入MVVM源出处:微软官方开源类库Prism:MVVM在WP7中的应用实例:单元测试13单元测试推荐使用微软内部开发WindowsPhone7在使用的Framework:使用介绍:TDD(TestDrivenDevelopment):用户界面应用程序架构用户界面错误报告产品定义性能PanoramaVSPivotPanorama强调多种数据源的聚合,像一个主页去到不同的地方,商店,人脉。Pivot对相似数据的过滤,短信,邮件。给用户与内置应用一致的体验。让用户觉得每个小细节都处理的很用心。站在巨人的肩膀上WindowsPhoneSDK7.1SilverlightToolkitforWPCoding4funToolkitforWP·AdControl·Border·Button·Canvas·CheckBox·Ellipse·Grid·HyperlinkButton·Image·ListBox·Map·MediaElement·Panorama·PasswordBox·Pivot·ProgressBar·RadioButton·Rectange·ScrollViewer·Slider·StackPanel·TextBlock·TextBox·WebBrowser·AutoCompleteBox·ContextMenu·DatePicker·DateTimeConverters·ExpanderView·Gestures·HeaderedItemsControl·HubTile·ListPicker·LocalizedResources·LockablePivot·LongListSelector·LoopingSelector·MultiselectList·PageTransitions·PerformanceProgressBar·PhoneTextBox·RecurringDaysPicker·TiltEffect·TimePicker·ToggleSwitch·WrapPanel·AboutPrompt·ColorHexagon·ColorPicker·ColorSlider·InputPrompt·MemoryCounter·MessagePrompt·MetroFlow·PasswordInputPrompt·ProgressOverlay·RoundButton·RoundToggleButton·SuperSlider·TimeSpanPicker·ToastPrompt18性能应用程序架构用户界面错误报告产品定义性能基本原则不要在模拟器上测试性能,模拟器通常比真机快2-3倍。永远不要在UIthread做耗时很长的事情,会让应用程序没有响应。阅读UserExperienceDesignGuidelines,按照这里的原则设计应用程序会解决很多性能上的问题。永远不要猜测性能的瓶颈,测量一下。20启动性能使用启动画面拆成一个个的小dll,在启动时可以减少load的dll数目图片,xml等文件设为Content,可以减小dll文件的大小。本地数据库性能每一张表都要加上Version数据定义每个Column只用最简单的get,set或者定义在成员变量上。大数据量的查询,如果set里有一个函数,就会显著影响查询性能。共享DataContext,如果每次创建新的DataContext,会慢上几十倍。22UI性能使用PerformanceProgressbar而不是WP7SDK自带的Progressbar使用DeferredLoadListBox如果你需要一个列表并且里面有很多图片DataBinding的性能问题Converter会显著影响性能,避免使用使用代码创建UI比DataTemplate要高效3s-1s23内存泄露.Net也有内存泄露?当然有商场能够上架的要求是应用程序使用内存小于90M最主要的内存泄露的地方事件处理函数没有被-=全局的类(Singleton)引用了对象没有解除引用24进一步了解WindowsPhone7Development最佳实践的Wiki,Performance部分:错误报告应用程序架构用户界面错误报告产品定义性能错误报告关注每天都在运行的程序天翼空间开发者社区专家讲坛是天翼空间开发者社区2012年针对开发者推出的一项,专业能力提升的系列讲座,在每周四的晚上,邀请移动互联网开发领域的权威专家,通过语音频道专题讲座,线上论坛访谈,以及微博、QQ群线上同步直播的形式,为社区的开发者用户提供系统的技术讲座,答疑,以及运营知识方面的培训。312012年天翼空间开发者社区将会邀请来自微软、新浪、InfoQ等优秀平台的技术专家,为开发者做关于windowsphone、phonegap、安卓等技术开发相关系列讲座。热情欢迎更多的技术牛人和移动开发爱好者,加入到我们的专家讲坛活动中来,共同成长。