Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Android中每24小时更新一次数据库_Android_Sqlite_Alarmmanager_Android Pendingintent - Fatal编程技术网

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

如何在Android中每24小时更新一次数据库,android,sqlite,alarmmanager,android-pendingintent,Android,Sqlite,Alarmmanager,Android Pendingintent,在我的应用程序中,我使用一个按钮来更新我的sqlite数据库,但现在我想每24小时自动更新一次数据库。我该怎么做?我试过使用倒计时,但当我的应用程序不运行时,它就不起作用了。我尝试了pending Intent and Alarm Manager,但它不能正常工作(注意:我测试了10秒而不是24小时)。当我开始我的活动时,它第一次起作用,然后它停止并且不起作用。以下是我尝试的代码: public class Activity_Settings extends ActionBarActivity{

在我的应用程序中,我使用一个按钮来更新我的sqlite数据库,但现在我想每24小时自动更新一次数据库。我该怎么做?我试过使用倒计时,但当我的应用程序不运行时,它就不起作用了。我尝试了pending Intent and Alarm Manager,但它不能正常工作(注意:我测试了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);

}



}

请检查以下链接。使用alarm manager在repeat task中添加服务,然后写入广播接收器以接收引导事件以再次注册repeat task,因为它将在手机重新启动后擦除您的注册事件。

从我的角度来看,还有一种方法是在更改设备日期时调用该服务

而用户将在那个时打开应用程序,检查数据,若日期改变,那个么之前的日期,然后调用服务


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

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

  • 定义并实现更新服务类中DB的方法

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

  • 在活动中,使用
    AlarmManager
    计划任务

这正是(不完全)你想要做的。不太了解,所以不会对此发表评论。

添加后台服务类,并在24小时更新后拨打电话。您是否尝试将ALM设置为24小时?如果它能工作,你可以使用相同的代码同步数据库。我已经24小时没有尝试过了,但我已经尝试了10秒,但它不能正常工作。当我关闭应用程序时,服务将停止。请查看此链接以了解任务计划:谢谢!我会试试这个:)希望这会对你和其他游客在未来有所帮助。