如何在Android中每24小时更新一次数据库

时间:2015-12-23 06:47:01

标签: android sqlite alarmmanager android-pendingintent

在我的应用程序中,我使用按钮更新我的sqlite数据库但现在我想每24小时后自动更新我的数据库。我怎样才能做到这一点?我尝试使用CountDownTimer,但是当我的应用程序没有运行时,这不起作用。我尝试了待处理的Intent和Alarm Manager,但它没有正常工作(P.S:我测试了10秒而不是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);

}



}

3 个答案:

答案 0 :(得分:2)

您应该使用AlarmManager来安排服务中的任务。 采取以下步骤:

  • 定义并实现更新Service类中DB的方法。

  • 定义负责调用Service类来执行任务的BroadcastReceiver

  • 在您的活动中,使用AlarmManager来安排任务。

这个link完全(不完全)完成了你想做的事情。不太了解SyncAdapter,所以不会发表评论。

答案 1 :(得分:0)

请查看以下链接Link Here。一些基本的事情要跟随使用报警管理器在重复任务中添加服务然后写广播接收器以接收启动事件再次注册重复任务,因为它将在电话重启后擦除您的注册事件。

答案 2 :(得分:0)

从我这边开始,还有一种方法是在更改设备日期时调用该服务。

当用户将在那时打开应用程序检查数据,如果日期更改,则更改日期,然后调用服务。

您的24小时服务将在后台运行,如果连续检查时间并等待24小时,也可能需要加载。