##第三章:经典场景设计
###图片缓存设计:
图片缓存的出现是为了避免出现OOM问题,根据需要对图片的加载进行一些压缩和优化,它主要完成三个任务:
-
图片的缓存,可以有效的减少对于流量的消耗,优化用户体验
-
图片的压缩加载,降低加载大图时出现OOM的几率,保证鲁棒性
-
完成图片的异步加载,可以简化开发
现在基本上使用的主流图片开源框架有很多:Universal-Image-Loader(已不再更新维护,不推荐使用,但可以研究阅读源码),
Picasso,Glide,Fresco
###网络流量优化:
-
对于网络请求回来的大量数据(大于1K)开启gzip压缩
-
尽量减少网络请求次数
-
要建立网络请求取消机制,在离开当前页面时需要能将该页面上发出的网路请求都取消了
-
良好的网络请求设计是要加入重试机制(get)和防重机制(post)
-
对于请求的网络图片要进行合适的裁剪(一般在图片加载器中进行配置)
-
优秀的网络框架需要充分考虑在4G/3G甚至是2G网络状态下的情况,可以通过区分网络情况而决定加载图片的质量或者是是否加载图片(省流量模式和极速模式)
###城市列表的设计:
城市列表常见的解决方案有一下几种:
-
把所有的城市都写死在本地的文件中
-
每次都通过网络请求进行获取
-
将数据保存在本地并标注版本号,每次启动APP时都进行更新检查,若有新版的城市列表则下载新版的城市列表到本地中。
-
将数据保存在本地并标注版本号,每次检查更新时并不是更新全部,而是增量更新
###原生和H5的交互:
####原生调用H5的方法:
- 在H5中定义好方法
- 在原生中启用JavaScript,并在原生的点击事件中通过WebView来加载要执行的JavaScript方法,并传如参数。
//HTML中的代码
<script type="text/javascript">
function changeColor(color){
document.body.style.backgroundColor = color;
}
</script>
//Android中的代码,调用了HTML中的changeColor方法
webView.getSettings().setJavaScriptEnable(true);
webView.loadUrl("http://www.wei/text.html");
btn.setOnClickListener(new View.OnClickListener(){
@override
public void onClick(){
String color = "#00ee00";
webView.loadUrl( "javascript:changeColor('"+ color+"');");
}
});
####H5调用原生的方法:
- 在原生中定义好调用接口的方法
- 通过WebView将定义好的接口方法注册了
- 在JavaScript中直接调用方法,并传入参数
//H5页面调用原生的callAndroidMethod()方法
<a onclick="baobao.callAndroidMethod(100,100,"ccc",true)">点击调用原生方法<a/>
//原生定义好接口方法
class JSInterface{
public void callAndroidMethod(int a,int b,String c,boolean d){
if(d){
String message = "-"+(a+1)+"-"+(b+1)+"-"+c+"-"+d;
new AlertDialog.Builder(MainActivity.this)
.setTitle("title")
.setMessage(message)
.show();
}
}
}
//通过webView将定义好的方法注册
webView.addJavaScriptInterface(new JSInterface(),"baoabo");
###消灭全局变量:
-
将数据放在Intent中进行传输(数据量不能过大)
-
把全局变量序列化到本地,这样可以保证数据的持久性,但是也有很多的硬伤,包括线程同步问题,IO读写问题
-
UserManager是唯一的全局变量,
##第三章:Android命名和编码规范
关于命名和编码规范,每个团队有自己独有的习惯,这个并没有生特别硬性的规定,只要符合一般的规范就好。
-
命名要见名知意,不要起无意义的名字
-
布局文件名,可以根据用途来加缩写前缀来区分,例如MainActivity的布局文件可以写成act_main.xml等
-
布局文件中的字符串,颜色值,尺寸等都放到对应的value文件中,不直接写死在布局文件中
-
常量一般都是大写字母组成,通过下划线分割单词
编码规范主要是为了提高开发效率和便于后期维护而制定的规则,主要还是需要有一个统一的风格格式。