如何每2秒在TextView中检查和设置网络状态?

时间:2017-05-19 07:21:37

标签: android android-asynctask android-thread

我想在TextView中设置网络状态,我想重复调用方法并在后台设置,所以我使用带有无限循环的AsyncTask类

class setNetworkText extends AsyncTask
{

    @Override
    protected Object doInBackground(Object[] params) {
        for(;;)
        {
            if(isNetworkConnected()) //check internet connection and if found it return true
                setOnline();         // it set my TextView text to Online
            else
                setOffline();        // it set my TextView text to Offline

            Thread.sleep(2000);
        }

        return null;
    }
}

但它不起作用,它会停止我的申请。

3 个答案:

答案 0 :(得分:1)

Android将(在大多数版本中)一次只执行一个AsyncTask - 因此,如果您在一个AsyncTask的doInBackground中保持阻塞,则不会运行其他AsyncTasks,从而阻止您的应用程序。

看一下使用Handler.postDelayed或使用TimerTask。它们更适合重复动作。

答案 1 :(得分:1)

你不能使用AsyncTask来做到这一点。您应该使用Handler定期安排任务。

// Create the Handler
Handler handler = new Handler();

// Define the code block to be executed
private Runnable runnableTask = new Runnable() {
    @Override
    public void run() {
      if(isNetworkConnected())
            setOnline(); 
        else
            setOffline();         
    }
};

// Call on main thread (for example, inside onResume())
@Override
protected void onResume() {
    super.onResume();
    handler.postDelayed(runnableTask, 2000);
}
// Remember to unregister it onPause()
@Override
protected void onPause() {
    super.onPause();
    handler.removeCallbacks(runnableTask);
}

答案 2 :(得分:0)

new CountDownTimer(30000, 1000) {

     public void onTick(long millisUntilFinished) {
        //check something on time interval here 1 second  
     }

     public void onFinish() {
         //when your task done here 3 second is time to end 
     }
  }.start();

解释
CountDownTimer(long millisInFuture,long countDownInterval)

millisInfuture 将是您要运行任务的时间长度, countDownInterval 是您的情况下的间隔为2秒