第一章:重构
1、要新建一个AndroidLib类库,将业务无关的逻辑转移到AndroidLib,一般来说包含五在部分
- activity:存放的是与业务无头的activity基类,
- net:存放网络请求相关的
cache:存放缓存数据和图片相关的处理
-ui:存放的是自定义控件
-util:存在工具类
2、为主项目的分类就根据情况来activity:存在所有activity
- adapter:存在所有adapter
- utils:等
3、为activity重新定义新的生命周期
学过设计模式的人都知道,一个类或者是方法只做一件事,需要在BaseActivity里面定义一些抽象方法,比如public abstract void initView,public abstract void loadData(),在onCreate里面调用调用这两个方法,所有的子activity都必须继承自BaseActivity
4、统一事件处理,例如统一的使用switch,case
5、实体化编程,在网络请求中使用fastjson或者是Gson来进行实体映射,在使用这两个时要注意,如果是代码混淆了,需要加这两个
keepattributes Signature // 避免混淆泛型
keepattributes *Annotation* // 不要混淆注解
6、在activity之间传递数据要避免使用全局变量,使用Intent来进行传递数据,因为使用全局变量过后,App一旦被切换到后台,当手机内存不足的时候,就会回收这些全局变量,从而当App再次回到前台地,如果再继续使用全局变量就会造成空指针,如果必须要使用全局变量的化一定要把它们序列化到本地。
7、我们在使用Adapter的时候要定义一个adpater的模板,这样就规范化了,每个Adapter都有这四个方法getCount()、getItem()、getItemId()、getView()
8、类型安全转换函数,例如下面的代码;
int result = Integer.valueOf(obj.toString());
一旦obj这个对象为空,那么上面直接会崩溃,因为obj是从服务器上取出来的,我们不能保证服务器上数据不能为空造成的,比较好的做法是是我们自己写一个类型安全转换的函数
public final static int convertToInt(Object value, int defaultValue) {
if (value == null || "".equals(value.toString().trim())) {
return defaultValue;
}
try {
return Integer.valueOf(value.toString());
} catch (Exception e) {
try {
return Double.valueOf(value.toString()).intValue();
} catch (Exception e1) {
return defaultValue;
}
}
}
其实是还有对于这种substring这种start和end这种也需要安全的考虑
首先、不能让App直接崩溃,应该在解析json时外面包一层try…..catch…语句,并截取在catch里面进行处理