应用程序未运行时在后台运行SyncAdapter

时间:2016-12-01 16:47:02

标签: android android-syncadapter

即使应用程序未运行,是否可以在后台运行SyncAdapter?我想更新sqlite数据库,如果服务器有任何变化,即使Android应用程序没有运行?

2 个答案:

答案 0 :(得分:1)

此用例的最佳做法可能是:

1)每当数据发生变化时,从服务器触发Broadcast

2)从广播接收器启动服务。 (您可以通过广播发送一些额外的数据来区分广播操作)。

3)在已启动的服务中更新数据库。

如果上述解决方案不是一个选项,那么:

我建议您使用JobScheduler这是一种较新的推荐方法,用于此类用例。

虽然,您也可以使用SyncAdapters实现目标。但是现在,当您需要维护帐户或在其他应用之间共享AuthTokens或在SyncAdapter中存储一些ContentProviders特定数据时,通常会使用它们。

答案 1 :(得分:1)

您可以定期运行同步适配器。您的应用程序是否正在运行并不重要。它将始终定期执行同步。形成documentation,您可以像这样添加定期同步

    ContentResolver.addPeriodicSync(
            ACCOUNT,
            AUTHORITY,
            Bundle.EMPTY,
            SYNC_INTERVAL);

然后在你的 onPerformSync 方法中做数据库的东西。

    @Override
    public void onPerformSync(Account account,Bundle extras,String authority,ContentProviderClient provider,SyncResult syncResult) {
    /*
     * Do your database stuff
     */
    ...
    }