在 2025 收官前,看清 Data + AI 的真实走向,点击查看 BUILD 大会精华版 了解详情
写点什么

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

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

关注

评论

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

天啊!怎么会有人把Spring Cloud微服务架构讲得这么透彻?

Java架构之路

Java 程序员 架构 面试 编程语言

区块链数字货币钱包源码价格,区块链多币种钱包

13530558032

基于SpringBoot、SpringCloud、Docker微服务架构实战,资源分享

Java架构之路

Java 程序员 架构 面试 编程语言

小学妹问我:如何利用可视化工具排查问题?

田维常

可视化

【涂鸦物联网足迹】涂鸦云平台消息服务—顺带Pulsar简单介绍

IoT云工坊

人工智能 物联网 云服务 Apache Pulsar 云平台

收藏!数据建模最全知识体系解读

华为云开发者联盟

数据仓库 数据 数据建模

云算力矿机源码价格,区块链挖矿平台开发

13530558032

Forrester 最新报告:阿里云稳居领导者地位,引领云原生开发浪潮

阿里巴巴云原生

阿里云 Serverless Kubernetes 容器 云原生

IoT企业物联网平台,从设备端到云端业务系统全链路开发实战

不吃米饭

阿里云 最佳实践 物联网 IoT

年轻人不讲武德不仅白piao接口测试知识还白piao接口测试工具会员

测试人生路

接口测试

#不吐不快# CV千千条,修改最重要。代码不规范,伙伴两行泪!

程序员小航

奇葩的经历 不吐不快

synchronized 到底该不该用

古时的风筝

Java synchronized

#不吐不快# 三观很正的Boss,你遇到过么?

架构精进之路

职场成长 奇葩的经历 不吐不快

科普干货|漫谈鸿蒙LiteOS-M与HUAWEI LiteOS内核的几大不同

华为云开发者联盟

华为 鸿蒙 IoT

太赞了!腾讯T3-3架构师整理了5000页的Java学习手册免费开放下载

Java架构之路

Java 程序员 架构 面试 编程语言

开个交易所需要多少费用?数字货币交易所搭建

13530558032

圆通快递回应内鬼泄露用户信息:严打数据倒卖灰色产业

石头IT视角

SpringBoot:整合Swagger3.0与RESTful接口整合返回值(2020最新最易懂)

比伯

Java 编程 架构 面试 计算机

分布式事务太繁琐?官方推荐Atomikos,5分钟帮你搞定

互联网应用架构

分布式事务 springboot

一瞬间让我秒变“快男”!腾讯内部强推Java性能优化手册,快了不止一点点。

Java架构追梦

Java 架构 jdk 面试 性能优化

高性能利器!华为云MRS ClickHouse重磅推出!

华为云开发者联盟

数据库 Clickhouse MRS

云原生2.0时代下,DevOps实践如何才能更加高效敏捷?

华为云开发者联盟

云计算 数字化 华为云

一次 Java 进程 OOM 的排查分析(glibc 篇)

996小迁

Java 编程 架构 面试 计算机

《垃圾回收的算法与实现》.pdf

田维常

垃圾回收

区块链,音乐,流媒体和版税

CECBC

区块链 艺术

区块链在债券市场如何应用

CECBC

区块链 债券

胡继晔:中国应建区块链行业准入制度

CECBC

区块链 金融 数字经济

什么是低代码(Low-Code)?

移动研发平台EMAS

工具 研发效能 低代码 开发 代码

DàYé的CTO姗姗学步路

曲水流觞TechRill

管理 CTO

大四女学霸社招竟成功签约字节跳动,拿下30万年薪?

Java架构师迁哥

KubeVela 正式开源:一个高可扩展的云原生应用平台与核心引擎

阿里巴巴云原生

阿里云 开源 Kubernetes 云原生 OAM

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