2017-05-19 8 views
0

은 내가 반복 방법 및 배경 설정을 호출 할 텍스트 뷰에서 네트워크 상태를 설정하려면, 그래서 무한 루프TextView에서 네트워크 상태를 2 초마다 확인하고 설정하는 방법은 무엇입니까?

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

와 AsyncTask를 클래스를 사용하지만이 작동하지 않습니다, 내 응용 프로그램을 중지합니다.

+0

왜 당신이 chec하고 싶은지 말해 줄 수 있습니까? 그것의 무거운 임무 및 너무 많은 배수 장치를 소모하기 때문에 k 2 초마다. 그렇게하기위한 목적을 이해할 수 있다면 다른 해결책을 통해 당신을 도울 수 있습니다. –

+0

이것 좀보십시오 : http://stackoverflow.com/questions/6242268/repeat-a-task-with-a-time-delay – tknell

+0

나는 ** 온라인 TextView ** 텍스트를 설정하고 싶습니다. 아니면 .. 그리고 나는 매 2 초 bcoz에서 확인하고 싶습니다. 매 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

millisInfuture 당신이 작업하고 countDownInterval를 실행하려면 시간이 될 것입니다 (긴 millisInFuture, 긴 countDownInterval는) 귀하의 경우 간격입니다 2 초입니다

+0

감사합니다. –

+0

메이트가 대답을 수락합니다. 위대한 –

+0

:) 행복하게 도와주세요. –

1

안드로이드는 한 번에 하나의 AsyncTask 만 실행합니다. 따라서 doInBackground에서 하나의 AsyncTask를 차단하면 다른 AsyncTask가 실행되지 않으므로 애플리케이션이 차단됩니다.

Handler.postDelayed을 사용하거나 TimerTask를 사용하십시오. 반복되는 작업에 더 적합합니다.

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