规划Android项目结构
1.建立Android Lib类库,将与业务无关的逻辑转移到Android Lib。Android Lib至少包括五大部分:包名+ acticity,cache,net,ui,utils 。
- activity包里面存放的是与业务无关的Activity基类。
- net包里存放的是网络底层封装。
- cache包里面存放的是缓存数据的封装,比如:图片和图片的相关处理。
- ui包中存放的是自定义控件
- utils包中存放的是各种与类无关的公用方法。
将主项目的类分门别类的进行划分,放置在各种包中。
- activity:我们按照模块继续划分,将不同模块的Activity划分到不同的包中。
- adapter:所有的适配器都放在一起
- entity:所有的实体都放在一起
- db:SQLite相关逻辑的封装
- engine:将业务相关的类都放在一起
- ui:将自定义控件都放在这个包里
- utils:将所有的公用方法都放在这里
- interfaces:真正意义上的接口,命名以I作为开头
- listener:基于Listener的接口,命名以On作为开头
2. 为Activity定义新的生命周期
可以把onCreate方法拆成三个子方法
- initVariables:初始化变量,包括Intent带的数据和Activity内的变量
- initViews:加载layout布局文件,初始化控件,为控件挂上事件方法
- loadData:调用MobileAPI获取数据
3. 统一事件编程模型
只要在一个团队内部达成了协议,决定使用某种事件编程方式,所有开发人员就要按照同样的方式编写代码。
4. 实体化编程
4.1在网络请求中使用实体
一些开发人员不使用实体化编程,在获取MobileAPI网络请求返回的JSON数据时,使用JSONObject或者JSONArray来承载数据,然后把返回的数据当作一个字典,根据键取出响应的值。介绍fastJSON和GSON这种实体化编程的方式.
使用fastJSON如下:
WeatherEntity weatherEntity = JSON.parseObject(content, WeatherEntity.class);
WeatherInfo weatherInfo = weatherEntity.getWeatherInfo();
if (weatherInfo != null) {
tvCity.setText(weatherInfo.getCity());
tvCityId.setText(weatherInfo.getCityid());
}
使用GSON如下:
Gson gson = new Gson();
WeatherEntity weatherEntit