2016-05-22 3 views
0

バックグラウンドでのカウントを定期的に増やそうとしています。バックグラウンドでAsnycTaskのカウントを増加させるハンドラが遅れていない

これは

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




public void run() { 

      count++; 

      } 
     }, 10000); 

    } 
} 

私は、それはそれは非常に高速カウント数(毎秒ほぼ2K)が増加し始め、10秒を待って、このタスクを実行するAsyncTask

の私のハンドラとdoInBackground関数です。私は10秒ごとにカウント1を増やしたい。

+0

が続いてハンドラ内でのThread.sleepを入れて...あなたが現在やっていることはそれが完璧に動作しながら、真のループ –

答えて

1

while(true)ループが原因です。基本的に別のスレッドの中に新しいスレッドを作成していて、タイミングを捨ててしまいます。 while(true)を削除し、run()の中にdoInBackground()を呼び出すことで、この問題を解決できます。これは、ハンドラがループを維持する方法です。ここに例があります:

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

希望します!

+0

を実行し、10秒待っています。ありがとうございました。 – 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

いいえ、ハンドラはイベントを発生させたときに追跡を続けるために余分なスレッドを必要としません –

関連する問題