写点什么

小米李政谈如何构建高质量的 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:362278
用户头像

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

关注

评论

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

JEB Pro v5.28 (macOS, Linux, Windows) - 逆向工程平台

sysin

JEB

得物可观测平台架构升级:基于GreptimeDB的全新监控体系实践

得物技术

可观测性 存算分离 流式计算 GreptimeDB

原生APP开发的优点

北京木奇移动技术有限公司

APP开发 软件外包公司 APP外包公司

当数字孪生遇见碳中和:西门子 Xcelerator给企业转型带来“新武器”

科技热闻

Bolt.diy 评测方案:从部署到创意实践的全方位探索

穿过生命散发芬芳

DeepSeek Bolt.diy

苹果Mac截图和屏幕录制工具:CleanShot X

Rose

Audition 2025(AU2025)中文直装版-Mac/win

Rose

Splunk Enterprise 9.4.2 发布 - 机器数据管理和分析

sysin

Splunk Enterprise

金仓数据库 KingbaseES 的 rm-protect 机制:守护数据安全的可靠防线

金仓技术

KingBase 金仓数据库

程序编程必备工具:SQLPro Studio可视化数据库管理

Rose

Mermaid代码生成流程图全攻略!办公绘图不要太简单!

职场工具箱

AI 流程图 AIGC Mermaid AI 绘图

Nipper 3.7.0 Windows x64 - 网络设备漏洞评估

sysin

Nipper

CrossOver25中文破解版下载安装教程,CrossOver 软件激活码分享,CrossOver 25 for Mac如何永久免费使用

阿拉灯神丁

激活码生成器 Mac软件 CrossOver Mac下载 crossover mac 破解版 苹果电脑必备软件

五一劳动节|致敬平凡而伟大的劳动者

中烟创新

3D动画和视觉特效(VFX) SideFX Houdini for Mac

Rose

YashanDB Docker 镜像实践指南:一次配置,多处部署!

数据库砖家

数据库

TextIn MCP Server正式发布,无代码搭建智能文档处理Agent!

合合技术团队

人工智能 算法 #大数据

百度智能云千帆正式上线Qwen3系列模型

科技热闻

初探 YashanDB 共享集群:重新定义高可用数据库的新范式

数据库砖家

数据库

PS/LR滤镜插件套装Nik Collection 6安装教程

Rose

检测IP质量时除了纯净度,还需要注意这些问题!

kookeey代理严选

代理IP 测试环境 住宅ip 独享代理

几行代码配置高频按钮,保障用户体验一致

HarmonyOS SDK

harmoyos

老牌原声鼓音源Toontrack EZDrummer for Mac安装教程

Rose

在iPhone / iPad上轻松模拟GPS位置AnyGo

Rose

2024全新AI脚本插件合集182款

Rose

YashanDB 在 GIS 领域的实践与优势解析

数据库砖家

数据库

账户锁定解决方案

运维有小邓

AD域管理 账户锁定

初学者视角下的思考|YashanDB 安装流程能不能再友好一点?

数据库砖家

数据库

Microsoft System Center 2022 version 2503 Multilanguage - Windows 服务器管理软件

sysin

Windows Server

Microsoft System Center 2025 version 2503 Multilanguage - Windows 服务器管理软件

sysin

Windows Server

CrossOver 25.0.1 for macOS & Linux - 领先的 Wine 解决方案

sysin

crossover

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