周边游app的技术memo。
1 json接口定义
时间尽量用timestamp。
2 支付接入
支付用的支付宝快捷支付和WAP支付,因为后台问题,暂时是在客户端签名(快捷支付就没有通过后台)。
3 第三方接入
基本用的友盟,包括第三方登录分享(微博、微信、朋友圈、QQ、腾讯微博,没有用SSO),用户反馈,自动更新,行为统计(自定义事件)。
挺方便的,基本按照友盟的guide就行。就是要注意申请的对不对,比如用release签名申请的微信,这边还一直用debug签名在调,费劲好久才发现。
消息推送用的Jpush,可以根据别名和标签推送。标签可以多个。
4 定位、地图、导航
定位不能用android自带的api,有偏移。用百度的定位sdk,地图sdk,包括覆盖物、路径规划。
有些开发版的手机定位不好,没定位到就会跑掉非洲边上的海里,可能那地方经纬度都是0。
不爽的是移动版sdk没有setcenter("城市名")这样的接口来切换城市,只能用经纬度。网页版有。
5 网络
没用afinal之类。就简单的用了HttpURLConnection。
多线程发现AsyncTask不同版本上表现不一致, 2.3sdk上编译的在4.0以上运行竟然并发线程数为1,
只好把AsyncTask源代码拷过来,改下线程数。没有其他依赖文件。
6 异常
不知为何后期logcat中再不打印exception信息,就是tag为RuntimeError的那些。可能是某个第三方库引起的?
只好实现了一个UncaughtExceptionHandler来输出,这样也好,还能把crash信息存到文件,甚至通过网络发送出来。
7 数据实体类entity
开始所有entity实现的是Serializable接口,后来发现如果要在activity之间传送entity的list,必须实现Parcelable接口。
8 db
开始说基本不存本地,就没加db,后来消息还是需要存,不想写db,就直接将对象list序列化到文件存在sd卡中算了。
接口还是写成insertMessage、updateMessage、deleteMessage这样仿数据库的。
还做了一点list排序(Collections.sort)和去重(TreeSet),就是重写两句java自带的Comparator。
9 utility
getNetworkStatus、sdCardIsAvailable、enoughSpaceOnSdCard、enoughSpaceOnPhone、isValidMobile、readFile、saveFile、GetVersion、getImei
10 列表list的上拉分页、下拉刷新
开始同事找的一个控件有手势冲突之类的问题,后来同事换了个PullToRefreshListView,还不错。
11 日期选择
日期选择页面显示的是三四个月的价格,得手工在convas上绘制线条图形和文字,有点工作量,有经验也至少得好几天。
12 PopupWindow bug
发现PopWindow在Android 2.3上运行的一个bug。不能直接(显式或隐式)调用其无参构造函数,得在子类构造函数中先调用super(context)。
问题在android源码http://androidxref.com/2.3.7/xref/frameworks/base/core/java/android/widget/PopupWindow.java#setContentView,第384行。
解决办法来自wangpingtaohn的博客:http://my.eoe.cn/545347/archive/19796.html。