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

How to check and set network status in TextView every 2 seconds?

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

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;
    }
}

但它不起作用,它停止了我的应用程序。

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

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

您不能使用 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);
}
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 秒