|
|
思路
原生 Dialog 的使用及不足
先贴出一般的使用方法:
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle("title")
.setMessage("message")
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
}
})
.setNegativeButton("取消", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
}
});
builder.create().show();
可以发现如果在项目中多次使用此种方法构建 Dialog 那么势必会产生大量重复的无用代码。且项目中如果需要多次展现相同的 Dialog ,这时每个 Dialog 都产生一个对象显然是极为浪费资源。再加上这个对象被回收还会带来的 ANR 风险。所以,我们需要对 Dialog 进行封装。
封装 Dialog 工具类的思路
即有如下需求:
- 丰富的自定义选项
- 尽量减小内存占用
其中第二点可以通过 Dialog 与页面的解耦来实现,具体的方式是建立一个单例模式的 DialogUtil ,用这个工具类来持有 Dialog 对象的弱引用,并提供展示、隐藏 Dialog 的方法给页面调用
这样做的好处是:
- 可以实现 Dialog 的复用
- 弱引用可以防止内存泄漏
- 统一管理 Dialog ,对象被回收时即使重建以避免 ANR12自定义 - 传参减小内存 - 较少对象,单例实现,抛弃枚举使用注解
同时需要给用户暴露相应的可能用到的接口
|
|