2016-10-19 6 views
0

私は2つのタスクをスケジュールしようとすると、毎日行われる最初の必要性 - 誕生日を確認するには、 2番目のタスクは今日の最初の日である必要があります..私は異なる時間に2つのタスクをスケジュールする必要があります

毎日午前8時に実行される1つのスケジュールを作成しようとしました。

trueの場合、2番目のタスクのメソッドを作成します。

私の問題は、onCreate()がその月の最初の日である&を完了するたびにメソッドが開始されることです。したがって、10月16日にアプリを10回開いた場合、 1回ではなく

私のコード:

のonCreate()

startTimers(); 

startTimers方法:

private void startTimers() { 

    d = new Date(); 
    d.setTime(System.currentTimeMillis()); 
    d.setHours(8); 
    d.setMinutes(0); 
    d.setSeconds(0); 

    timer = new Timer(); 
    timerTask = new TimerTask() { 
     @Override 
     public void run() { 

      if(d.getDate() == 1){ 
       // TODO: 19/10/2016 find good if that will make it work only 1 time per month.. 
       saveSalariesBeforeStartNewMonth(); 
       resetSumOfMinutes(); 
       Log.d("TAG","Started new Month good [email protected]#[email protected]"); 
      } 
      checkBirthdays(); 
     } 
    }; 

    timer.schedule(timerTask,d.getTime(),1000*60*60*24);//every day at 8:00 at morining.. 
} 

はヘルパーのためにありがとうございます。

答えて

0

startTimers()を呼び出す前に、保存された値で確認するように、正常にスケジューリングした後、SharedPreferencesに単純なブール値を格納してみます。 Sthさんのように:

public void onCreate(){ 
    if (!isScheduledAlready()) { 
    startTimers(); 
    } 
} 

public boolean isScheduledAlready(){ 
    SharedPreferences prefs = getPrefs().getPreferences(); 
    return prefs.getBoolean("schedule_keys", false); 
} 

public void setSchedule(boolean scheduled) { 
    SharedPreferences prefs = getPrefs().getPreferences(); 
    prefs.edit().putBoolean("schedule_keys", scheduled).apply(); 
} 

また、月が変わったときに値を微調整したいと思うかどうかはわかりません。もしあなたがちょうど私が推測するより多くの条件を追加する必要がある場合。

+0

ちょっと、私の指摘は、startTimersがタイマーを作動させなかったときです。 私は自分の電話で時刻を変更して、私が午前8時に到着したら何も追加しません。 –

関連する問題