当我们处于某些Asynctask doinBackground()方法 - 执行需要网络(Internet连接)的操作之间,以及如果在网络之间丢失那么我们的应用程序结果时,大多数时候我们作为程序员遇到这个问题强制关闭或崩溃,或FreeZed。为了阻止这种情况,我们使用try / catch操作与代码一起使用。
我只是想知道有没有完美的方法来做同样的事情,下面的场景,
在我的情况下:
每隔20秒我需要一次Internet连接来解析Asyntask中的API,并且根据API的结果,我必须在屏幕上更新UI。
这是我的计时器方法
timer = new Timer();
TimerTask task = new TimerTask() {
@Override
public void run() {
if(DCCStaticMethod.checkInternet(DriverMainMenuActivity.this)){
try {
if(mLocalAreaDriverPass.getStatus() == AsyncTask.Status.FINISHED){
mLocalAreaDriverPass = new LocalAreaDriverPass(DriverMainMenuActivity.this,true);
mLocalAreaDriverPass.execute();
Log.d("RefreshLocalAreaTimerDriver", "running");
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
};
timer.scheduleAtFixedRate(task, 20000, 20000);
假设在任何时刻,互联网连接丢失或宕机,如何取消并重新启动计时器以达到我的要求。
我有很多诀窍和差事来执行相同的工作,但我正在寻找良好的方法来执行这些类型的任务,因为这些类型的任务几乎都发生在所有应用程序中
答案 0 :(得分:2)
在Catch块中,首先取消定时器并为网络连接注册广播。在广播接收器中再次启动计时器。Here是监控网络的文档。
答案 1 :(得分:1)
制作用于检查互联网连接的广播接收器。并获得该状态。如果连接丢失,则将值设置为任何应用程序类或简单类的变量,然后在活动中将该变量用于停止计时器。
答案 2 :(得分:1)
有一个自定义类CountdownTimerwithPause.By使用它可以在Asyn任务中间暂停和取消计时器
请参阅以下链接