【问题标题】:Using AlarmManager to sync data with a server使用 AlarmManager 与服务器同步数据
【发布时间】:2014-08-24 15:11:43
【问题描述】:

首先,我为我的英语道歉。

我需要不时地向服务器发送数据并查询该服务器中的数据,可能是每周一次。

所以我将使用 AlarmManager 来执行此操作。我想知道我是否可以在警报管理器中注册两个单独的待处理意图,一个用于将数据推送到服务器,另一个用于从服务器查询数据。我可以在每次应用程序执行时注册这两个意图吗?或者我是否需要测试我是否已经注册了这些意图?

我之所以这么问是因为我害怕我注册一个警报以从现在开始执行一周然后用户关闭应用程序并重新启动并且从现在开始一周再次注册警报最终将永远不会启动。

另外,使用 AlarmManager 注册要执行的服务是否安全?

哦,这是我正在使用的代码:

long WEEK_IN_MILLIS = AlarmManager.INTERVAL_DAY * 7;

PendingIntent querySyncService = PendingIntent.getService(context, 0, new Intent(context,
    QuerySyncService.class), PendingIntent.FLAG_CANCEL_CURRENT);

PendingIntent pushSyncService = PendingIntent.getService(context, 1, new Intent(context,
    PushSyncService.class), PendingIntent.FLAG_CANCEL_CURRENT);

AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);

alarmManager.setInexactRepeating(AlarmManager.RTC, WEEK_IN_MILLIS, WEEK_IN_MILLIS, querySyncService);

alarmManager.setInexactRepeating(AlarmManager.RTC, WEEK_IN_MILLIS, WEEK_IN_MILLIS, pushSyncService);

我正在考虑将此代码放入某个方法中,然后每次应用启动时调用该方法。

而且我还看到我可能应该使用的解决方案是 SyncAdapter,但 SyncAdapter 似乎很脏,有很多代码什么都不做,例如,您需要一个 Stub Authenticator,然后是一个 Stub Authenticator Service一个 Stub Content Provider 和一个 Stub Content Provider Service,然后是 Sync Adapter 的大量代码,然后是另一组仅运行 SyncAdapter 的代码。这对我来说似乎太脏了,因为我不需要内容提供者,也不需要身份验证器。

【问题讨论】:

    标签: android android-intent alarmmanager android-syncadapter


    【解决方案1】:

    当然,您可以使用AlarmManager 注册两个单独的 Intent。请确保在您对PendingIntent.getService... 的调用中使用不同的 id(顺便说一句,我建议您不要使用 0 作为 id。在 Java 中,0 很容易获得)。使用 ACTION 或 Extras 中的参数来区分它们。

    没有理由使用BroadcastReceiver:您可以直接在Service 处触发意图。如果您担心安全性,请不要导出服务。 PendingIntent 是从您的应用程序中触发的,因此无需使 Service 在外部可见。

    最后,虽然您对 SyncAdapter 的开销是正确的,但它确实是一种很好的方式来完成您正在尝试做的事情。在EnterpriseAndroid 中有一个很好的描述如何写一个(我是作者之一)。一旦你通过样板,它实际上几乎是优雅的。

    有一个最小 SyncAdapter 的示例here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-10
      • 1970-01-01
      • 2012-04-26
      • 2019-01-16
      相关资源
      最近更新 更多