我想在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;
}
}
但它不起作用,它会停止我的申请。
答案 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秒