ContentProviderは、あなたの目的に完全に適合します。それはあなたのためのIPCを処理します。 私は、このような方法でそれを作った:
@Override
public void onPerformSync(Account account, Bundle bundle, String s, ContentProviderClient contentProviderClient, SyncResult syncResult) {
try {
ResponseModel response = getAllData(deviceId);
if (response != null) {
addDataToDatabase(contentProviderClient, response);
}
} catch (RemoteException | RetrofitError exception) {
e.printStackTrace();
}
}
private void addDataToDatabase(ContentProviderClient contentProviderClient, ResponseModel response) throws RemoteException {
addTasks(contentProviderClient, response);
}
private void addTasks(ContentProviderClient contentProviderClient, ResponseModel response) throws RemoteException {
if (response.getTasks() != null) {
int size = response.tasksContentValues().size();
contentProviderClient.bulkInsert(TaskTable.CONTENT_URI,
response.tasksContentValues().toArray(new ContentValues[size]));
}
}
は、私は、バックグラウンド・プロセスのためだけのContentProviderを使用して、アプリ内で直接SqliteDatabaseを使用し続けることはできますか?それとも内部的にContentProviderを使うべきですか? – Gus
SyncAdapterを使用する場合は、ContentProviderが必要です。しかしここで述べたようにダミーのContentProviderを使うことができます:http://stackoverflow.com/questions/4649808/syncadapter-without-a-contentprovider –
これは問題です。私は既にダミーのContentProviderでSyncAdapterを使用しています。しかし、SyncAdapterは別のプロセスとして開始されるため、データベースへのアクセスは同期されないため、バッチの実行と同時にアプリケーションを使用している間、すべてのエラーが発生します。 – Gus