我们遇到的问题是需要在后台定期从我们的服务器同步大量信息,并将其保存在我们的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)只是一般的想法,利弊等等:))
答案 0 :(得分:-1)
addPeriodicSync()
将同步设置写入系统,意味着告诉Android同步框架定期运行同步适配器。因此,您不需要实现自己的调度程序。 (您需要持有WRITE_SYNC_SETTINGS
权限)ContentProvider
并对其执行CRUD。它是内容提供商管理进程间通信的主要功能之一,因此您不需要广播。相反,请使用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(...);
...
}
}