50万奖金+官方证书,深圳国际金融科技大赛正式启动,点击报名 了解详情
写点什么

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

  • 2012-06-29
  • 本文字数:2520 字

    阅读完需:约 8 分钟

在 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 的资源:原出处微软官方开源类库Prism MVVM 在 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>里面有个 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 ),获取实时的活动信息!

2012-06-29 21:362331
用户头像

发布了 156 篇内容, 共 57.7 次阅读, 收获喜欢 7 次。

关注

评论

发布
暂无评论
发现更多内容

搞定预设,让你的 ChatGPT 不受限制 | 社区征文

江户川码农

人工智能 聊天机器人 openai ChatGPT

附安装包和快捷键!5个不能错过的 Blender 插件

Finovy Cloud

软件 blender 3ds Max云渲染

详解Redis的主从同步原理

C++后台开发

redis 中间件 主从同步 后端开发 Linux服务器开发

BI工具数据看板哪个好,瓴羊Quick BI整不错!

流量猫猫头

软件测试/测试开发 | 测试平台开发-前端开发之Vue.js 框架

测试人

软件测试 测试开发 测试平台

转型调研 | “鼎新汇•企业行”第一站:走进中国联通软件研究院

信通院IOMM数字化转型团队

数字化转型 IOMM 鼎新汇•企业行 鼎新杯

科技大势怎么看 2023怎么干?

加入高科技仿生人

人工智能 低代码 科技 数字孪生 6G

如何基于 Antmove 将小程序快速迁移至 FinClip 环境

FN0

小程序 支付宝小程序 finclip

云快充研发中心平台架构师谈云原生稳定性建设之路

阿里巴巴中间件

阿里云 容器 云原生

60% 程序员大呼:我要远程办公!

引迈信息

敏捷开发 低代码 远程办公

好工作怎么选?五个核心的考量

小谷哥

尚硅谷Redis7实战教程发布

小谷哥

技术专家云集,OpenHarmony技术峰会分论坛聚焦内核及视窗创新

极客天地

阿里云函数计算助力高德RTA广告投放系统架构升级

阿里巴巴中间件

阿里云 云原生 函数计算

从资源弹性到数据弹性,乾象如何将云上量化研究效率提升 40%?

阿里巴巴云原生

阿里云 云原生

怎么预防LED显示屏静电

Dylan

设备 LED显示屏 全彩LED显示屏

基于人形检测的划区域客流统计

华为云开发者联盟

人工智能 华为云 华为云开发者联盟 企业号 3 月 PK 榜 人形检测

关于印度跨境数据传输,印度放宽了跨境数据传输

镭速

消灭报销,从超级差规开始,用友BIP解决大型企业商旅费控核心难题用友BIP

用友BIP

差旅报销

尚硅谷SSM项目视频发布

小谷哥

软件测试/测试开发 | 跨平台API对接(Java)

测试人

软件测试 自动化测试 测试发开

写作一年之后开始反思博客应该写什么

宇宙之一粟

个人成长 写作 博客

阿里云函数计算 FC 助力高德 RTA 广告投放系统架构升级

阿里巴巴云原生

阿里云 云原生 函数计算

车企数据分类分级的实践指南出炉!“数据安全推进计划”发布,奇点云参编

奇点云

数据安全 奇点云 数据分类分级 车企

大国重器用友BIP,助力贸易行业数智化转型

用友BIP

数智化

博睿数据数智领航营全国巡讲火热预约中,扫码即可参与报名~ ​​​

博睿数据

智能运维 博睿数据 数智领航营

阿里云 ACK@Edge 助力元戎启行加速进入自动驾驶规模化生产

阿里巴巴云原生

阿里云 云原生容器 云原生r

从青铜到王者,揭秘 Serverless 自动化函数最佳配置

阿里巴巴云原生

阿里云 Serverless 云原生

分投趣fintoch去中心化借贷交易dapp系统开发搭建

开发微hkkf5566

免费下载丨一看即会,Serverless 技术进阶必读百宝书

阿里巴巴云原生

阿里云 Serverless 云原生

小米李政谈如何构建高质量的WP7应用程序_后端_贾国清_InfoQ精选文章