本来我是一直在做unix、Linux下服务端的开发的,但是这个项目中作windows mobile上终端开发的同事离职了,加之后来因为种种原因没有招来新人,于是我就把这块接手了过来。
因为我们的项目是做即时语音聊天的项目,在手机终端上涉及到的更多的是网络通讯、群组用户管理和语音方面,所以我下面提到的windows mobile与pc上开发的差异可能更多对类似应用具有更大参考价值。
我们的项目采用vc++开发,使用的开发环境是vs2008,主要的mobile平台是 mobile 6.0,mobile6.5,也有些涉及到wince 5。
mobile和pc这两种平台主要区别如下:
1。 电源管理
电源管理在pc上几乎不用考虑,但是在手机上必须要考虑。因为这直接关系到手机的待机时间。有些型号的手机在待机模式下就会关闭网络,包括gprs和wifi,有些则不会。这些必须针对不同的手机进行适配。有时候的解决方法就是定时去扫描系统状态,让系统一直不休眠,但是通过关闭屏幕的方式去节约电能。
2。 屏幕尺寸
手机上的屏幕比pc小了很多,同时手机的尺寸又差异很大,有横屏,也有竖屏,同时分辨率也是差异巨大。这时候考虑的不只是通过计算屏幕分辨率设置各个控件的大小和位置,同时也要考虑操作方式。
在pc上可以一个窗口放置很多的控件,方便的实现很多的功能;但是在小屏幕的手机上,每一个屏幕上就只能实现简单的很少的功能。这样就会导致一个在pc上很常见的操作在手机上却需要好几个界面切换才能实现,客观上增加了操作的复杂度。于是就需要仔细分析业务流程,按照使用的频率把他们分类,从而设计界面。达到最常用的功能可以用最少的步骤去实现,相对不常用的操作可以稍微增加操作复杂度。
3。 键盘
一般的手机上只有 左右键,音量键,4方向导航键,中间确认键,电话和挂机键,有些手机会有一个电源键,有些有一个相机键。但是有些手机没有方向键,有些左右键都没有。对于应用本身来说,如何有效的应用仅有的那几个键是必须去研究的。
有些键被操作时候是不发相应的消息给应用系统的。比如音量按键按下和弹起2个消息就不是所有手机都会发到应用程序;音量键长按在有些手机上被设置为系统的功能,应用程序使用全局键盘钩子都无法拿到消息;耳机上的按键有些手机会发消息给应用,大部分就不会。
同样都是中间确认键,但是不同的手机在相同操作的情况下发送上来的消息键值不同。
另外,如果长按某一个键,键盘按下和弹起的消息有些手机是在按下和弹起的时候分别发送上来,有些手机就是按下的时候2个消息同时发送上来的。
最后,实现同样一个功能可以采用几个按键中的任意一个时,需要考虑实际操作的方便性。大拇指和食指是使用最多的2个手指,尽量把功能是现在这2个地方的按键上。再者,右手使用者和左右使用者的操作习惯就不同。
4。 触屏
pc上一般不会涉及到触屏的问题,但是手机上增加了这个触屏,于是也就增加了一些特别值得注意的地方。
首先,由于手机很少有右键菜单,所以长按屏幕上的一点就相当于pc上的右键操作;
其次,对于触屏手机,操作如果是在没有笔的情况下,就需要把操作的按钮等控件的面积做的大一些,这样操作时候不会误点造成误操作。但是同时出现的问题就是有限的屏幕与必要的控件面积之间的矛盾。
5。 处理性能
pc上有时候不需要去考虑那么多的效率,但是手机的处理性能很有限,内存也很有限,于是对程序就提出了更好的要求。
前段时间要实验一个语音编解码算法,在pc上没有问题,但是在手机上就不行,压缩时间不过关。通常手机的cpu采用arm架构,但是arm架构cpu的浮点运算和除法就需要尽量避免。
其次,在pc上可以随便分配内存,甚至可以把大文件都load进内存,但是在手机上不可以。在手机上定义一个大的数组都会报错。
6。 部分mfc类库不支持
有些mfc的类库在手机上不支持。比如,如果你想在对话框里嵌入网页浏览器,做个类似qq弹出新闻的那种对话框。在pc很简单就实现了,让对话框从chtmldialog继承下来就行了,但是在手机上不支持这个类。于是就只好采取其他方法了。
7。 网络流量
一般pc上网都是包月,流量似乎很少去考虑,在手机上流量意味着钱。因此做移动互联网应用的时候就必须尽量为客户节约流量。考虑方向有两个:业务流程上减少不必要的交互,在应用层协议上尽量压缩。
8。 电话
手机上做应用就不可避免的接触到电话功能:接听电话,挂断电话,访问电话簿等等。
9。 gprs拨号和网络管理
手机上的网络通信方式之前基本都是gprs,先进一点的有wifi和蓝牙。但是基本上把gprs和wifi处理好就差不多了。
另外需要注意的一点就是,2g手机在电话操作的时候会把gprs网络断掉,电话之后需要重新拨号。在3g网络原则上不存在这个问题,但是也需要具体测试。在拨号使用过程中,如果不小心按了挂机键,有些手机会挂断gprs网络。
10。调试
程序运行调试也是区别之一。在pc上可以立刻编译,调试。调试的工具也很多。但是在手机上调试就会费劲一些。如果只是通用功能的调试用模拟器就可以了。调试的辅助工具有vs的远程调试工具:远程注册表编辑,远程进程管理,当然还有trace。当然pc上的spy++就不能用了。
最后提醒的是,在同步调试模式下,调试udp的时候可能会有问题,这些可能与局域网的路由器设置有关。有些路由器不容许udp包通过,这样就会导致模拟器无法收到udp包。
暂时先写这么多,希望对初次涉及到mobile下vc开发的朋友有点帮助。具体的技术细节在以后的文章再写。这里只是泛泛的讨论下。
阅读(1847) | 评论(0) | 转发(0) |