2015-12-23 131 views
0

在我的應用程序中,我使用一個按鈕來更新我的sqlite數據庫,但現在我想在每24小時後自動更新一次數據庫。我怎樣才能做到這一點?我試過使用CountDownTimer,但是當我的應用程序沒有運行時,這不起作用。我嘗試了待處理的意圖和報警管理器,但它不能正常工作(P.S:我測試了10秒而不是24小時)。當我開始我的活動,然後停止並且不起作用時,它第一次工作。這是我試過的代碼:如何在Android中每24小時更新一次數據庫

public class Activity_Settings extends ActionBarActivity{ 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
Intent notificationIntent = new Intent(mActivity, MyAlarmService.class); 
     PendingIntent contentIntent = PendingIntent.getService(mActivity, 0, 
notificationIntent,0); 

     AlarmManager am = (AlarmManager) 
      getSystemService(Context.ALARM_SERVICE); 
     am.cancel(contentIntent); 
     am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() 
       + AlarmManager.INTERVAL_DAY * 1, AlarmManager.INTERVAL_DAY * 
     1, contentIntent); 

    } 
    } 

服務類:

public class MyAlarmService extends Service { 



@Override 

public void onCreate() { 

// TODO Auto-generated method stub 
     Intent mainIntent = new Intent(this,Activity_Settings.class); 
Toast.makeText(this, "MyAlarmService.onCreate()", Toast.LENGTH_LONG).show(); 

// update database 
} 



@Override 

public IBinder onBind(Intent intent) { 

// TODO Auto-generated method stub 

Toast.makeText(this, "MyAlarmService.onBind()", Toast.LENGTH_LONG).show(); 

return null; 

} 



@Override 

public void onDestroy() { 

// TODO Auto-generated method stub 

super.onDestroy(); 

Toast.makeText(this, "MyAlarmService.onDestroy()", Toast.LENGTH_LONG).show(); 

} 



@Override 

public void onStart(Intent intent, int startId) { 

// TODO Auto-generated method stub 

super.onStart(intent, startId); 

Toast.makeText(this, "MyAlarmService.onStart()", Toast.LENGTH_LONG).show(); 

} 



@Override 

public boolean onUnbind(Intent intent) { 

// TODO Auto-generated method stub 

Toast.makeText(this, "MyAlarmService.onUnbind()", Toast.LENGTH_LONG).show(); 

return super.onUnbind(intent); 

} 



} 
+0

添加後臺服務類並在24小時更新後調用。 – Destro

+1

使用同步適配器 –

+0

你試圖設置24小時阿拉姆嗎?如果它工作,你可以使用相同的代碼同步數據庫 – Sree

回答

0

請檢查下面的鏈接Link Here。一些基本的東西要遵循使用報警管理器在重複任務中添加服務,然後編寫廣播接收器接收啓動事件以再次註冊重複任務,因爲它會在電話重新啓動後擦除註冊事件。

0

另外一個方法就是在改變設備日期時調用該服務。

當用戶將在當時打開應用程序檢查數據,如果日期改變,然後以前的日期然後調用服務。

您的24小時服務將在後臺運行,並且如果它連續檢查時間並等待24小時,也可能會負載。

2

您應該使用AlarmManager來安排您的任務處於服務狀態。 請執行以下步驟:

  • 定義並實現您的方法來更新Service類中的DB。

  • 定義BroadcastReceiver負責調用服務類來完成任務。

  • 在你的活動中使用AlarmManager來安排任務。

這個link確實(不完全)是你想要做的。對SyncAdapter不太瞭解,所以不會對此發表評論。

+0

謝謝!我會試試這個:) –

+0

希望這會在未來幫助你和其他訪問者。 –

相關問題