2

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

我看到它的方式,我有一些 otpions,只是不太确定我完全理解所有的后果。

1) 有一个进程内服务器,START_STICKonStartCommand, 和 addPeriodicSyncs (大概是 on Application#onCreate) 返回。

2) 拥有一个进程内服务器,START_STICKY用于将定时器任务排队并定期更新数据库。

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

所以,这里有几个问题:

a) 选项 #1 和 #2 是否排除了 SyncAdapter?运行 SyncAdapter 有什么好处?(除了必须开始一个新ThreadServiceHTTP 请求之外)

b) #1 和 #2 是否在我的应用程序被销毁后仍然存在?如果他们这样做了,他们会带回整个应用程序吗?

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

d) 在#3 和主应用程序进程之间来回讨论最简单的方法是什么?广播接收器?其中大部分将通过纯粹Cursor使用通知 URI来处理

e)只是一般的想法,优点/缺点等:)

4

1 回答 1

-1
  1. Android 同步框架的主要优点是您不需要实现自己的框架。
  2. addPeriodicSync()将同步设置写入系统,意味着告诉 Android 同步框架定期运行您的同步适配器。所以你不需要实现你自己的调度器。(您需要获得WRITE_SYNC_SETTINGS许可)
  3. 实现自定义(不是存根)ContentProvider并在其上执行 CRUD。管理进程间通信是 Content Providers 的主要功能之一,因此您不需要广播。相反,使用ContentProvider+ Loader( http://developer.android.com/guide/components/loaders.html ) 来更新游标。

内容提供者:

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

同步适配器:

class MySyncAdapter extends AbstractThreadedSyncAdapter {
    public void onPerformSync(...) {
        ...
        new ContentResolver(getContext()).insert(...);
        ...
    }
}
于 2014-10-24T20:41:43.220 回答