Android - Firebase jobdispatcher

时间:2017-02-01 20:51:22

标签: android firebase android-service firebase-job-dispatcher

我想知道是否可以使用Firebase jobdispatcher来安排网址命中并获取响应以更新数据库。 我希望它每天晚上运行一次。有谁知道这是否可能?

我找不到这样做的好例子。我已经阅读了android文档和https://github.com/firebase/firebase-jobdispatcher-android#user-content-firebase-jobdispatcher-

我需要使用Firebase jobdispatcher,因为我的目标是API 16.

提前致谢。

更新

这就是我每天安排一次的工作。

public class Student
  {
    public int StudentID { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }

    public List<StudentTestScore> Scores { get; set; }
  }

  public class StudentTestScore
  {
    public int StudentID { get; set; }
    public int Score { get; set; }
  }

  class Program
  {

    static void Main(string[] args)
    {
      var students = new List<Student>
        {
        new Student { StudentID = 1, FirstName = "Brett", LastName = "X" },
        new Student { StudentID = 2, FirstName = "John", LastName = "X" }
        };
      var grades = new List<StudentTestScore> { new StudentTestScore { StudentID = 1, Score = 98 } };

      var combined = students.Join(grades, x => x.StudentID, y => y.StudentID,
                (x, y) => new
                {
                  Student = $"{x.FirstName} {x.LastName}",
                  Grade = y.Score
                }).ToList();

      combined.ForEach(x => Console.WriteLine($"{x.Student} {x.Grade}"));

      Console.ReadLine();
    }

2 个答案:

答案 0 :(得分:16)

您可以使用Firebase JobDispatcher安排定期作业。根据您的要求,您需要创建一个扩展JobService的服务,该服务从url获取响应并更新数据库。然后,您可以使用Firebase JobDispatcher计划此服务。在executionWindow中,您必须指定作业应在理想情况下运行的最早和最晚时间。

如果你想在每24小时后安排工作,你可以使用执行窗口(60 * 60 * 24,60 * 60 * 24 + 60)。然后,如果你想要它应该每晚运行,那么你必须确保它最初是在晚上安排的。为此,您可以在安装应用程序时使用AlarmManager在夜间(仅一次)触发,并使用作业调度程序安排定期作业,或者另一种方式是基于现在的差异和所需的执行您可以使用jobdispatcher安排非递归作业的时间,该作业将在晚上和该作业服务中运行,您可以使用作业调度程序安排重复作业。

ExecutionWindow指定大致时间。它不能保证它会在给定的窗口运行。如果它错过了窗口,作业将在理想情况下最早运行。对于重复作业,一旦作业完成,下一个作业将计算从上次运行时间开始的执行窗口时间。

Job myJob = dispatcher.newJobBuilder()
                    .setTag("my-unique-tag")
                    .setRecurring(true)
                    .setLifetime(Lifetime.FOREVER)
                    .setService(MyJobService.class)
                    .setTrigger(Trigger.executionWindow(60*60*24,60*60*24+60))
                    .setReplaceCurrent(false)
                    .setRetryStrategy(RetryStrategy.DEFAULT_EXPONENTIAL)
                    .setConstraints(Constraint.ON_ANY_NETWORK)
                    .setExtras(myExtrasBundle)
                    .build();

dispatcher.mustSchedule(myJob);

答案 1 :(得分:1)

您可以通过告知Job.Builder使用触发器创建定期作业来安排定期作业,该作业具有根据您的需要执行的窗口。