如何在Android中设计同步服务

时间:2014-09-12 15:20:02

标签: android android-service android-sqlite android-syncadapter android-service-binding

我们遇到的问题是需要在后台定期从我们的服务器同步大量信息,并将其保存在我们的SQLite DB中。

我看到它的方式,我有几个otpions,只是不太确定我完全理解所有分歧。

1)从[{1}}返回START_STICK的进程内服务器,以及addPeriodicSyncs(可能在onStartCommand上)。

2)拥有一个Application#onCreate的进程内服务器,它将计时器任务排队并定期更新数据库。

3)让START_STICKY在自己的进程中运行并写入我们的SQLite DB。

所以,问题如下:

a)选项#1和#2是否排除了使用SyncAdapter?运行SyncAdapter有什么好处? (除了必须在Service上启动新的Thread以发出HTTP请求)

b)#1和#2能否在我的应用被破坏后继续存在?如果他们这样做,他们会把整个申请带回来吗?

c)我可以用#3写入我的SQLite数据库吗?我猜是的,因为他们会在相同的用户ID下吗?

d)在#3和主要申请流程之间来回交谈的最简单方法是什么?广播接收器?其中大部分都是通过纯Service通知URI

来处理的

e)只是一般的想法,利弊等等:))

1 个答案:

答案 0 :(得分:-1)

  1. Android同步框架的主要优点是您不需要实现自己的框架。
  2. addPeriodicSync()将同步设置写入系统,意味着告诉Android同步框架定期运行同步适配器。因此,您不需要实现自己的调度程序。 (您需要持有WRITE_SYNC_SETTINGS权限)
  3. 实现自定义(不是存根)ContentProvider并对其执行CRUD。它是内容提供商管理进程间通信的主要功能之一,因此您不需要广播。相反,请使用ContentProvider + Loaderhttp://developer.android.com/guide/components/loaders.html)更新游标。
  4. 内容提供商:

    class MyContentProvider extends ContentProvider {
        public Uri insert(...) {
            ...
            mDbHelper.getWritableDatabase.insert(...);
            ...
        }
    }
    

    同步适配器:

    class MySyncAdapter extends AbstractThreadedSyncAdapter {
        public void onPerformSync(...) {
            ...
            new ContentResolver(getContext()).insert(...);
            ...
        }
    }