访问网络获取数据是耗时操作,一般会开启新线程进行。在启动线程前可先判断网络环境。当需要编写的线程很多时,可将判断语句内置到线程类中,以后每次写新线程时就能省略掉网络判断,提高写代码效率:若继承Thread,可重写其start方法:
private class MyThread extends Thread {
@Override
public void run() {
// TODO 访问网络
super.run();
}
//重写start方法,网络通才start
@Override
public synchronized void start() {
if(NetUtil.checkNet(context)) { //网络可访问则返回true
super.start();
} else {
PromptManager.showNoNetWork(context); //网络不通则显示提示信息
}
}
}若继承AsyncTask,由于其execute方法为final,不可重写,需要换个方法名字:
protected abstract class MyHttpTask<Params> extends AsyncTask<Params, Void, Message> {
/**
* 类似于Thread重写start
* 由于execute为final无法重写,方法改名字
* 省略掉网络判断
* @param params
* @return
*/
public final AsyncTask<Params, Void, Message> executeProxy(Params... params) {
if(NetUtil.checkNet(context)) {
super.execute(params);
} else {
PromptManager.showNoNetWork(context);
}
return null;
}
}
本文介绍了一种在网络请求中加入网络状态检测的方法,通过重写Thread和AsyncTask的启动方式来实现网络检测,以此避免在线程任务开始执行后因网络问题导致的失败。

344

被折叠的 条评论
为什么被折叠?



