第二章App框架设计与重构
response标准格式:
{
"isError":false,
"errorType": 0,
"errorMessage": "网络异常",
"result": ""
}
{
"errorMessage" : "网络异常",
"errorType" : 0,
"isError" : false,
"result" : {
"cinemaID" : 1,
"cinemaName" : "星美"
}
}
AnsyTask的缺点:
- 不能灵活控制其内部的线程池。
- 没有暴露取消请求的方法,导致任务队列阻塞。
使用线程池+Runnable+Handler的方式:
将成功失败的回调放在基类里面,对公用的处理进行封装,其实常用的网络框架比如Volley,okHttp,Ansy_http_client都可以这样去处理。如果有特殊情况,则可以通过重写基类里面的回调来进行特殊处理。还有就是加载网络数据的对话框等也可以在基类通过方法来进行显示,隐藏控制,比如在onBefore()里面显示,在onError()或者onFinish()以及onResponse()里面讲对话框进行隐藏。
App数据缓存:
- 这方面这本书应该讲的是接口优化和网络优化这方面的知识:
- 一个APP页面的数据通过一个接口来进行返回,没必要设置多个接口来进行获取。
- 进行返回数据的缓存处理(只针对[get]获取的数据,不针对[post]修改数据)。当然在做缓存之前要考虑是否当前业务适合缓存,比如有些即时行要求比较高的操作或者页面展示。
- 缓存地址一般选择为sd卡缓存。
- 底层封装的时候根据url作为key来判断缓存是否存在,如果存在,返回缓存数据,否则根据url去进行请求。
App自动登录功能实现:
- 不要本地保存用户名,密码,或者如果要保存,一定要进行加密来处理。
- 利用cookie(token)来作为用户唯一性的标示。(我们项目就是这么干的)。
- 用户相关的,用cookie,无关的,服务器可以控制无需校验cookie。
- 注销功能,清除本地cookie(token)。
- cookie过期处理,进入登录界面,返回前面的页面重新操作。(还是需要在底层回调的地方进行处理)
防止黑客刷库:
利用验证码来进行防刷,如果同一IP频繁访问同一接口,在登录界面有输入验证码,或者弹出输入验证码的浮窗。
时间校准 ,开启Gzip压缩:
更新本地时间和服务器时间差的方法:
https://github.com/icodeu/AppProgrammingSource/blob/master/2.5.2%20%E6%97%B6%E9%97%B4%E6%A0%A1%E5%87%86/AndroidLib/src/com/infrastructure/net/HttpRequest.java