如何降低代码的耦合

降低代码的耦合,通常需要暴露一个接口,提供一个回调函数。

例如短信备份时,短信备份的代码(序列化短信到xml文件,保存为xml是因为xml具有跨平台的好处,android备份的短信也可以在ios系统中还原)是由A程序员写的,

界面的ui是由B程序员写的,这时客户要求加一个进度条对话框,a程序员提供一个普通方法,b把ProgressDialog对象传进去,由a给进度条设置最大值,以及备份过程的进度,从而达到显示进度的效果,如果客户又要求ProgressDialog太丑了,要换成ProgressBar,此时A和B都要修改代码,代码的耦合度太高,可以有a提供一个回调函数,b只需根据回调函数进行处理,从而降低代码的耦合度


** 短信的工具类 */
public class SmsUtils {
/** 备份短信的回调接口 */
public interface BackUpCallBack{
/** 开始备份的时候设置进度条的最大值 */
public void beforeBackup(int max);
/** 备份过程中,增加进度 */
public void onSmsBackup(int progress);
}
/** 备份用户的短信 
* @param pb 进度条
* @param BackUpCallBack 备份短信的回调接口
*/
public static void backupSms(Context context, BackUpCallBack callBack) throws Exception{
ContentResolver resolver = context.getContentResolver();
File file = new File(Environment.getExternalStorageDirectory(), "backup.xml");
FileOutputStream fos = new FileOutputStream(file);
//把用户的短信一条一条的都出来,按照一定的格式写到文件里(xml保存文件,跨平台)
XmlSerializer serializer = Xml.newSerializer();//获取xml文件的生成器(序列化器)
//初始化生成器
serializer.setOutput(fos, "utf-8");
serializer.startDocument("utf-8", true);
//根节点
serializer.startTag(null, "smss");
//每一条短信的内容
Uri uri = Uri.parse("content://sms/");
Cursor cursor = resolver.query(uri, new String[]{"body", "address","type", "date"},
null, null, null);
int max = cursor.getCount();
//开始备份的时候,设置进度条的最大值
//pb.setMax(max);
callBack.beforeBackup(max);
int process = 0;
while(cursor.moveToNext()) {
String body = cursor.getString(0);
String address = cursor.getString(1);
String type = cursor.getString(2);
String date = cursor.getString(3);
serializer.startTag(null, "sms");
// 写内容
serializer.startTag(null, "body");
serializer.text(body);
serializer.endTag(null, "body");
// 写号码
serializer.startTag(null, "address");
serializer.text(address);
serializer.endTag(null, "address");
//写类型
serializer.startTag(null, "type");
serializer.text(type);
serializer.endTag(null, "type");
// 写时间
serializer.startTag(null, "date");
serializer.text(date);
serializer.endTag(null, "date");

serializer.endTag(null, "sms");
//备份过程中增加进度
//pb.setProgress(++process);
callBack.onSmsBackup(++process);
}
cursor.close();
serializer.endTag(null, "smss");
serializer.endDocument();
fos.close();
}
}


/** 短信备份 */
public void smsBackup(View view) {
pd = new ProgressDialog(this);
pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
pd.setMessage("正在备份短信");
pd.show();
new Thread(){
public void run() {
try {
SmsUtils.backupSms(AtoolsActivity.this, new BackUpCallBack() {
public void onSmsBackup(int progress) {
pd.setProgress(progress);
pb.setProgress(progress);
}

public void beforeBackup(int max) {
pd.setMax(max);
pb.setMax(max);
}
});
//Toast.makeText(AtoolsActivity.this, "备份成功", 0).show();
runOnUiThread(new Runnable() {
public void run() {
Toast.makeText(AtoolsActivity.this, "备份成功", 0).show();
}
});
} catch (Exception e) {
e.printStackTrace();
runOnUiThread(new Runnable() {
public void run() {
Toast.makeText(AtoolsActivity.this, "备份失败", 0).show();
}
});
} finally {
pd.dismiss();
}
}
}.start();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值