0

我想在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;
    }
}

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

4

3 回答 3

1

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

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

于 2017-05-19T07:29:14.323 回答
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);
}
于 2017-05-19T07:35:27.187 回答
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 秒

于 2017-05-19T07:36:50.720 回答