BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

小米李政谈如何构建高质量的WP7应用程序

| 作者 贾国清 关注 0 他的粉丝 发布于 2012年6月30日. 估计阅读时间: 9 分钟 | QCon上海2018 关注大数据平台技术选型、搭建、系统迁移和优化的经验。

在6月28日,由天翼空间·开发者工厂主办,InfoQ协助策划的第十期专家讲坛活动上,来自小米科技米聊团队研发负责人李政( @-李政- )就如何开发高质量的Windows Phone应用的问题与大家进行了分享,内容涉及应用程序架构、用户界面、性能以及错误报告等。

Windows Phone 7开发实例——构建高质量的WP7应用程序讲稿下载

本次分享主要分为产品设计、应用程序架构、用户界面、性能以及错误报告几个部分。

在应用程序架构部分,李政提到在WP7版米聊中,使用到了MVVM(Model-View-ViewModel)模式:

  1. 将Mode和View分离,方便建立简洁、易维护、易扩展的应用程序。
  2. 可测试性强(View和Model分离可以针对Model进行单元测试)、UI的易用性强。
  3. UI易用性主要体现在可以在Expression Blend中快速设计界面,而且Toolkit可以提供设计时数据以供UI设计师在设计UI更方便的看到很多数据控件的显示。
  4. 当UI全部改变时,代码可以不改变。

MVVM使得UI与逻辑分离,更加方便进行单元测试,在米聊WP7版中,所有的UI代码都会写单元测试,此外,李政推荐了一些关于MVVM的资源:原出处微软官方开源类库PrismMVVM在WP7中的应用实例,推荐使用微软内部开发Windows Phone 7在使用的Framework以及使用介绍

在用户界面选择上,WP7上存在两种界面控件,Panorama和Pivot:

  • Panorama强调多种数据源的聚合,具有一副大于屏幕大小的底图,用户可以通过轻击和平移来选择不同的信息,呈现当前item的时候,同时也显示旁边item的一部分信息,Windows Phone中内置的People和Music+Videos界面就是典型的案例。
  • Pivot控件用来过滤大量的数据集,与Tab控件很像,在Windows Phone内置的功能中,E-Mail、Message和Calendar功能就是Pivot的一个应用。

鉴于以上特点,米聊最终选择的界面方案为Panorama。在性能方面,李政给出了自己的建议:

  • 不要在模拟器上测试性能,模拟器通常比真机快2-3倍。
  • 永远不要在UI thread 做耗时很长的事情,会让应用程序没有响应。
  • 阅读User Experience Design Guidelines,按照这里的原则设计应用程序会解决很多性能上的问题。
  • 永远不要猜测性能的瓶颈,测量一下。

另外,启动性能可以做到的优化有:使用启动页面,拆成一个个小的dll,在启动时可以减少加载的dll的数量,图片,XML等文件设为Content,可以减小dll文件的大小;通过在表中增加版本号,共享DataContext等方法还可提升本地数据库的性能;还要注意内存泄露以及UI性能,关于提升UI性能的建议有:

  • 使用Performance Progressbar而不是WP7 SDK 自带的Progressbar。
  • 如果需要一个列表并且里面有很多图片时,选择使用DeferredLoadListBox。
  • Data Binding 的性能问题
    • Converter 会显著影响性能,避免使用。
    • 使用代码创建UI比DataTemplate要高效

在最后,李政还建议开发者使用错误报告,建议关注每天都在运行的程序,可参考文章:Error Reporting on Windows Phone 7

在问答环节,李政回答了网友的提问,详细信息如下:

问:老师好,关于近期最热门的:“现有WP7设备都不能升级到WP8”,这个问题怎么看?另外,WP8和WP7.8把开始屏幕中的metro界面改的更加复杂,对于这个问题,您怎么看?
答:1.现在的WP7设备主要是因为硬件达不到WP8的要求,现在WP7的设备都是单核的。微软选择在WP8上和windows 8采用相同的架构,以及可以使用native code 共享代码,让开发者可以不抛弃以前的代码,到这一步Windows Phone才真正有了跟iPhone和Android抗衡的实力。2. Metro的问题,我个人是更喜欢这种灵巧的布局了,可以摆放更多的东西在主页上,现在的metro快太大,摆不了几个。

问:随着微软发布WP8,并且现有WP7不能升级到WP8,由基于WP7应用开发转向WP8应用开发有哪些问题呢?
答:现有的WP7的应用程序都可以直接在WP8上运行。在一个适当的时候把现有的应用的底层代码用native code重写,以支持WP8 和 Windows 8 也是个不错的选择。

问:Windows Phone的Socket Api没有bind和linsten? 那怎么监听一个数据送达的事件?网上的例子貌似都是开一个线程去死循环接受。 而且那个还真是无限执行的死循环。不是阻塞等待的。 电脑的CPU立马飙上去了。更不要说手机了。 求问怎么能监听一个端口的信息到达呢?
答:不需要死循环来等待,可以起一个线程,来异步等待,用SocketAsyncEventArgs,可以参考这里的内容:点击查看

问:WP7里有没像WPF中timer控件一样的定时控件或者其它能实现定时功能的东西啊?
答:WP7 里没有定时器控件,但是有相应的定时器类,DispatcherTimer和Timer可以使用。这里也有Timers的介绍:http://msdn.microsoft.com/en-us/library/zdzx8wx8

问:定义了一个listbox里面<ListBox.ItemTemplate><DataTemplate><StackPanel>里面有个textblock我想在cs里面获取到textblock里面的text值,请问是怎么获取的?还有选中某一项的时候那一项会一直处于选中状态,直到选其他项的时候才会改变,想要选中后改为不选中状态,就是跟我们的按钮是一样 点击后会变回非点击状态?
答:你可以参考这篇文章,它详细写了怎么找到itemtemplate 里的控件:http://www.windowsphonegeek.com/tips/how-to-access-a-control-placed-inside-listbox-itemtemplate-in-wp7

关于本期讲师

李政,微博账号@-李政-,小米科技米聊Windows Phone团队研发负责人,曾就职于微软负责Lync Android平台的研发工作。对Windows Phone和Windows 8相关技术有着浓厚的兴趣,致力于Windows Phone和Windows 8平台开发技术的研究。

关于专家讲坛

天翼空间开发者社区专家讲坛是天翼空间开发者社区(www.189works.com)2012年针对开发者推出的一项提升专业能力的系列讲座,每周四晚,邀请移动互联网开发领域的权威专家,通过语音频道专题讲座,线上论坛访谈,以及微博、QQ群线上同步直播的形式,为社区的开发者用户提供系统的技术讲座,答疑,以及运营知识方面的培训。

往期内容回顾

关于专家讲坛更多详情,请浏览官方网站。InfoQ也会对后续的活动进行跟踪报道。

关于社区活动的更多详情,欢迎查看InfoQ维护的社区活动日历,也欢迎关注InfoQ官网微博(@InfoQ),获取实时的活动信息!

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

疑问 by 孙 长宇


◦Converter 会显著影响性能,避免使用。
◦使用代码创建UI比DataTemplate要高效

很难想象没有Converter和DataTemplate的MVVM是什么样的

UI易用性主要体现在可以在Expression Blend中快速设计界面,而且Toolkit可以提供设计时数据以供UI设计师在设计UI更方便的看到很多数据控件的显示

使用模板和数据绑定是上述开发方式的必要条件吧

单元测试 by 林 足雄

终于看到有提到"单元测试".
非常重要的代码质量的一关卡,基本功.

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

2 讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT