最近几个月的一些工作心得
1、不同编译环境下的long型长度不一致,使用long long类型解决。
日前遇到一个long型数据由C++传递到Android环境中发生数据错误的问题,原因
在于不同环境下long型数据的字节长度不一。
以下为不同环境下对应的long型的字节长度
Lua脚本环境数值类型 8字节
32位系统VC下 4字节
Android GCC下 4字节
Java 8字节
我的流程是Lua->C++->Jni Java,所以在中间丢失了4个字节的数据导致了奇怪的结果。
最终将C++代码中的 long定义为 long long,这样的写法可以同时通过VC以及GCC的编译,并获得
正确结果。
其实也可以直接使用double类型。
2、编写测试代码,创建测试
编写测试代码挺花时间,不过可以在系统正式运行前就进行测试,可以
提前解决隐藏的很多问题。
3、安卓定时推送的测试技巧
在Android中测试某个时刻,比如Alarm定时器服务的启动,可以通过设定系统时间来测试。
如果你需要严格根据系统时间来测试程序逻辑,又不想等待很长(如一个小时)的时间来观察的话,
可以使用安卓系统上类似加速齿轮的工具来加速时钟周期(推荐烧饼加速器)
4、一套自定义UI需要具备的重要东西
在UI布局的设计过程中,支持锚点对于提升工作效率和提高屏幕适配是有帮助的。
5、配置参数独立在一个配置文件中,便于查找、修改和维护
6、对于一些不需要实时排序或者计算但又耗费时间的任务。可以通过设置一个脏位标识,在一个定时周期
后检查脏位进行处理,提高性能。
7、网络数据显示的用户体验设计
显示网络数据的界面是先获取数据再打开,还是先打开再获取数据?
用户体验上来说,玩家希望点击之后马上有响应,马上显示界面加loading动画再加载数据是大多数APP或者程序的实现选择。
前者间接把界面显示变成了异步,不好管理(比如要马上对界面做一些操作或对象保存)。后者界面上是同步的,好管理,能
马上获取到界面的UI进行管理。
8、MVC 在界面开发中的应用
Controller是根节点,Model 和 View 是其两个平行的子节点。
View只显示界面,把所有的按钮等用户交互事件通过事件机制或者回调函数传递到Controller中。
Model负责主要逻辑,比如网络读取、文件操作等,提供接口供Controller调用。
Controller作为View和Model通信的中介,负责一些界面加载逻辑,通过View的回调访问Model,再将Model返回的数据调用对应
的View显示出来。同时它作为根节点的一个特性是,它可以和其他Controller进行交互,而View和Model是不行的,保持了他们的可重用性。
(PS:昨天给面试官问这不是也是一棵跟三层结构一样的垂直结构吗,当时脑袋不清晰没跟他说是因为Controller可以进行交互的原因,所以
C是根节点,不同于常见的三层架构)
9、如果一个列表,前边是可变长文本,右边是一个按钮,那么可以选择让按钮在父框架中靠右边框对齐,不需要根据变长文本的宽度来更改
它自己的位置。编码方便且运行更加高效。
10、在编码的过程中先列好功能入口点,会避免粗心遗漏掉的地方导致产生潜在的BUG;