2012-04-26 8 views
0

私のアプリケーションアクティビティに次のコードスニペットがあります。特定の時間内にアクティビティを待機させます

初めてユーザーがアクティビティに参加した場合、ブール変数shouldSleeptrueに変更されます。

その後、else部分は60秒ごとでnotification世代が含まれて実行されます。それは他の部分にループし、したがって、睡眠に行く続けるとして

しかし、私はこのコードを実行した場合の主な問題があり、活動NEVERが表示されます。

残っているアプリケーションは、60秒ごとに正常に実行する必要があります。このメソッドの一部を実行する必要があります。else
私はそれがAsyncTaskと関係があると思いますが、それについてはあまり考えていません。

どうすればいいですか?あなたの助けを前にありがとう。

boolean shouldSleep=false; 
private void ShowNotification() 
{ 
    //DO SOME TASK 

    if (shouldSleep) 
    { 
     Thread.sleep(60000); 
     //DO SOME TASK 
    } 

    else 
    { 
     shouldSleep = true; 
    } 

     /** Calling the method recursively so that it always runs. */ 
     ShowNotification(); 
} 

答えて

1

たぶん、あなたは、Timerオブジェクトを使用することができます。

new Timer().schedule(new TimerTask() { 
    @Override 
    public void run() { 
     //This code is run all 60seconds 
     myBooleanVar = true; 
     //If you want to operate UI modifications, you must run ui stuff on UiThread. 
     Activity.this.runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 
       Activity.this.changeUiStuff(); 
      } 
     }); 
    } 
}, 60000); 
+0

'Activity.this.setDayOrNight()が何をん;'やります? – GAMA

+0

私はあなたのコードスニペットのrun()を使って私の全メソッドを置くべきですか?もちろん、 'Thread.sleep(60000);'を使わないでください。 – GAMA

+0

実行メソッドに作業コードを入れる必要があります。私が正しく理解していれば、TimerTask-> run()に入れなければならないことは "//何らかのタスクを行う"ことです。 Runnable-> run()メソッドは、ラベル内のテキストを設定するなど、UIの処理を実行する必要があります。 – djleop

0

ちょうどTimerを使用しています。代わりに、スレッドアプローチの、あなたはすべての60年代、あなたのタスクを実行できます。

new Timer().schedule(task, delay, period); 

期間を= 60 * 1000

関連する問題