我们有一个问题,我们需要在后台定期从我们的服务器同步大量信息,并将其保存在我们的 SQLite 数据库中。
在我看来,我有一些选择,只是不太确定我是否完全理解所有的后果。
1) 有一个进程内服务器,START_STICK
从 onStartCommand
返回,并添加 PeriodicSyncs(大概在 Application#onCreate
上)。
2) 有一个带有 START_STICKY
的进程内服务器,它对计时器任务进行排队并定期更新数据库。
3) 让 Service
在它自己的进程中运行并写入我们的 SQLite 数据库。
所以,这里是问题:
a) 选项 #1 和 #2 是否排除了 SyncAdapter?运行 SyncAdapter 有什么好处? (除了必须在 Service
上启动一个新的 Thread
来发出 HTTP 请求之外)
b) #1 和 #2 是否在我的应用程序被销毁后仍然存在?如果他们这样做,他们会带回整个应用程序吗?
c) 我可以用 #3 写入我的 SQLite 数据库吗?我猜是的,因为他们会使用相同的用户 ID,对吗?
d) 在#3 和主要申请流程之间来回对话的最简单方法是什么?广播接收器?其中大部分将通过纯粹使用带有通知 URI 的 Cursor
e) 只是一般的想法、优点/缺点等:)
最佳答案
- Android 同步框架的主要优点是您无需实现自己的框架。
addPeriodicSync()
将同步设置写入系统,意味着告诉 Android 同步框架定期运行您的同步适配器。所以你不需要实现你自己的调度器。 (您需要持有WRITE_SYNC_SETTINGS
权限)- 实现自定义(不是 stub )
ContentProvider
并对其执行 CRUD。管理进程间通信是 Content Provider 的主要功能之一,因此您不需要广播。相反,使用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(...);
...
}
}
关于android - 如何在 Android 中设计同步服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25811609/