2015-09-11 2 views
3

Мы знаем, что AsyncTask используется в Android для непродолжительного фонового процесса. Как правило, мы используем для разбора WepApi, В некоторых случаях «doInBackground()« выполнить в течение длительного времени для получения ответа.Android: установите время для AsyncTask

Предположим, что на момент исполнения doInBackground, если наш интернет ушел, индикатор выполнения все еще работает, чтобы получить результат.

Так что мой вопрос, мы можем установить таймаут для исполнения на doInBackground, как если бы выполнить более 2 мин остановить выполнение doInBackground и вызвать onPostExecute.

я судимый этот метод в doInBackground вызова

protected Void doInBackground(String... params) { 
     // TODO Auto-generated method stub 
     //String request = String.format(params[0], "12"); 
     Log.e("Tag " ,"Pasing Start"); 
     replay= getResponseByParsing(URL); 
     new Handler().postDelayed(new Runnable() { 

      @Override 
      public void run() { 

       Toast.makeText(MainActivity.this,"Checking async task",Toast.LENGTH_LONG).show(); 
      } 
     }, 20000); 

но приложение собирается принудительно закрывает

, что будет хорошим решением для устанавливает таймаут doInBackground exection

Спасибо заранее

+0

Опубликовать свой стоп-код –

+0

Я предпочитаю модернизацию для webapi быстро и выполнять все функции внутри http://square.github.io/retrofit/ – Nithinlal

+0

@Nithinlal. здесь я столкнулся с проблемой, как если бы Интернет ушел во время выхода AsyncTask, то что будет делать –

ответ

0

Сначала выполните вашу AsyncTask, затем заплатите TimerTask через 2 мин.

Когда таймер попадает, отметьте AsyncTask Status.

Если оно находится в RUNNING состоянии, то Cancel AsyncTask от AsyncTask.cancel(true).

Просто проверьте isCancelled() раз в то время, как показано ниже:

protected Object doInBackground(Object... x) { 
    while (/* condition */) { 
     // work... 
     if (isCancelled()) break; 
    } 
    return null; 
} 

Примечание: Вызов AsyncTask.cancel(true) метод приведет к onCancelled(Object) будучи вызван в потоке пользовательского интерфейса после doInBackground(Object[]) возвращается. Вызов этого метода гарантирует, что onPostExecute(Object) никогда не вызывается. После вызова этого метода вы должны периодически проверять возвращаемое значение isCancelled() с doInBackground(Object[]), чтобы завершить задачу как можно раньше.

0

Вы можете попробовать это:

private void startTimer() { 
     mTimer1 = new Timer(); 
     mTt1 = new TimerTask() { 
      public void run() { 
       mTimerHandler.post(new Runnable() { 
        public void run() { 

         if (count == 120) { // check for two minutes 
          // cancel your asynctask here 
          // cancel your timer also 
          mTimer1.cancel(); 
         } else { 
          count++; 
         } 
        } 
       }); 
      } 
     }; 
     // start your async task here 
     mTimer1.schedule(mTt1, 1, 1000); // at the same time start timer also. 
    } 

Днем Coding !!.

Смежные вопросы