如果Internet连接丢失,则停止计时器在应用程序中运行

时间:2013-12-18 05:30:12

标签: java android timer android-asynctask

当我们处于某些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);

假设在任何时刻,互联网连接丢失或宕机,如何取消并重新启动计时器以达到我的要求。

我有很多诀窍和差事来执行相同的工作,但我正在寻找良好的方法来执行这些类型的任务,因为这些类型的任务几乎都发生在所有应用程序中

3 个答案:

答案 0 :(得分:2)

在Catch块中,首先取消定时器并为网络连接注册广播。在广播接收器中再次启动计时器。Here是监控网络的文档。

答案 1 :(得分:1)

制作用于检查互联网连接的广播接收器。并获得该状态。如果连接丢失,则将值设置为任何应用程序类或简单类的变量,然后在活动中将该变量用于停止计时器。

答案 2 :(得分:1)

有一个自定义类CountdownTimerwithPause.By使用它可以在Asyn任务中间暂停和取消计时器

请参阅以下链接

How to extend CountDown Timer With Pause?