如何每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 秒
我想在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 秒