第一章 重构

1、重新规划Android架构

主App+AndroidLib

现在Android Studio开发可以创建多个moudle,那么AndroidLIb就可以创建单独的一个moudle管理

AndroidLib:

  • activity包 activity基类数据
  • net 网络相关
  • cache 缓存数据和图片处理相关
  • ui 自定义控件
  • utils 工具类

主APP:

  • activity  业务界面
  • adapter 所有适配器都放在一起
  • entity 实体类
  • db 数据库
  • engine 将业务类放一起
  • ui自定义控件
  • untils工具
  • interface 接口
  • listener 基于Listener的接口,命名以On作为开头

activity按模块划分,entity应该只有属性

2、定义BaseActivity

public abstract class BaseActivity extends AppCompatActivity {

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        initVariables();
        initViews(savedInstanceState);
        loadData();
    }

    /**
     * 初始化变量,包括Intent带的数据和Activity内的变量
     */
    protected abstract void initVariables();

    /**
     * 加载布局,初始化控件,为控件挂上事件方法
     * @param savedInstanceState
     */
    protected abstract void initViews(Bundle savedInstanceState);

    /**
     * 调用MobileAPI获取数据
     */
    protected abstract void loadData();
}

3、统一事件编程模型

建议监听事件以下方式实现

@Override
    protected void initViews(Bundle savedInstanceState) {
        setContentView(R.layout.activity_main);
        mTvOpen = (TextView)findViewById(R.id.open);
        mTvOpen.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //业务逻辑,单独提取私有类来实现,避免initView难以维护
            }
        });
    }

不建议使用activity implements View.OnClickListener方式,主要不希望R.id中的R反复出现

4、实体化编程

4.1

建议使用Gson或者fastJSON来处理网络请求等返回的json数据。

不建议自己转换JSONObject/JSONArray等然后使用JSONObject/JSONArray来获取数据,并在Activity之间传递

JSONObject/JSONArray是没有序列化的,而且十分繁琐

fastJSON混淆请加入:

-keepattributes Signature //避免混淆泛型
-keepattributes *Annotation* //不混淆注解  

否则:

  1. 加入符号Annotation的实体属性,崩溃
  2. 当有泛型属性时,崩溃

4.3

不建议使用全局变量在activity之间传递参数

必须使用时,请一点序列化参数

*这个我是不用的,一般都是有intent传参就可以

5、Adapter模板

自定义的Adapter需要实现4个方法

getCount()

getItem()

getItemId()

getView()

当然还有Holder类,ViewHolder的使用涉及到list的性能问题,这个网上也比较多

6、 安全转换函数

public final static int convertToInt(Object o, int defaultValue) {
        if (o == null || "".equals(o.toString().trim())) {
            return defaultValue;
        }

        try {
            return Integer.valueOf(o.toString());
        } catch (Exception e) {
            try {
                return Double.valueOf(o.toString()).intValue();
            } catch (Exception e1) {
                return defaultValue;
            }
        }
    }

小结:

这一章的内容不太多,也比较好理解,对于软件编写,会发现一个好的设计架构对于自己后续的开发是多么有用的帮助。

 

posted on 2018-10-28 09:52  DOUBLEYOU  阅读(121)  评论(0)    收藏  举报