2016-05-22 3 views
0

Я пытаюсь увеличить свой счет на фоне периодически.Обработчик для увеличения количества в AsnycTask на фоне не задерживается

Это мой обработчик и функции doInBackground в AsyncTask

protected Void doInBackground(Void... params) { 
    while(true){ 
     handler.postDelayed(new Runnable() { 




public void run() { 

      count++; 

      } 
     }, 10000); 

    } 
} 

Когда я выполнить эту задачу, он ожидает в течение 10 секунд, после чего он начинает увеличивать количество очень быстро (почти 2к в секунду). Я хочу увеличить счет 1 на каждые 10 секунд.

+0

Затем положить Thread.sleep внутри обработчика ... То, что вы в настоящее время остается только ждать в течение 10 секунд, а затем запустить некоторое время истинного цикла –

ответ

1

Ваш цикл while(true) вызывает это. Вы по существу создаете новый поток внутри другого потока, отбрасывая время. Вы можете решить эту проблему, удалив while(true) и позвонив по телефону doInBackground() внутри run(). Так обработчик продолжает цикл. Вот пример:

handler.postDelayed(new Runnable() { 
    public void run() { 
      count++; 
      doInBackground(""); 
     } 
    }, 10000); 

Надеюсь, это поможет!

+0

Он работает отлично. Спасибо. – ReadyFreddy

0

Вы можете использовать обработчик, если хотите что-то делать каждые X секунд.

private final static int INTERVAL = 10000; 
Handler mHandler = new Handler(); 

Runnable mHandlerTask = new Runnable() 
{ 
    @Override 
    public void run() { 
      doSomething(); 
      mHandler.postDelayed(mHandlerTask, INTERVAL); 
    } 
}; 

void startRepeatingTask() 
{ 
    mHandlerTask.run(); 
} 

void stopRepeatingTask() 
{ 
    mHandler.removeCallbacks(mHandlerTask); 
} 
+0

работает на фоне AsyncTask? Я имею в виду, если я использую этот код для основной деятельности, не начнет ли он зацикливаться и останавливать мою основную деятельность? – ReadyFreddy

+0

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

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

  • Нет связанных вопросов^_^