2016-10-19 69 views
0

我嘗試安排2個任務,第一個需要每天完成 - 要檢查生日, 第二個任務只有在今天是月份的第一天時才需要。我需要在不同時間安排2個任務

我試着做了1個日程安排,每天早上8點完成,當它完成檢查它是否是每月的第一天。

如果它確實是第二項任務的方法。

我的問題是,該方法每次啓動onCreate()完成&其第一天t月,所以如果我在1/10/16 10次打開應用程序,該方法將發生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

嘗試在成功調度後存儲一個簡單的布爾值到SharedPreferences,以便在調用startTimers()之前只檢查存儲的值。如:

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:00 .. –