android 中内容的 DELTA 更改同步延迟
Delay in syncing the DELTA changes from contentful in android
我是 contentful 的新手,我编写了一个 android 应用程序,它使用内容交付 API 从我的 space.
中获取内容
我已经使用 Vault 和普通 API(没有 vault)来获取内容。
我观察到在获取增量更改(新内容和更新内容)时总是有 3-5 秒的延迟。
我的要求是提供实时数据同步。
这是我的实现问题还是 contentful 的预期行为。
示例代码:
1. 使用保险柜
Vault.with(App.getInstance(), SampleSpace.class).requestSync(
SyncConfig.builder()
.setClient(ClientProvider.get())
.setInvalidate(false)
.build());
List<SampleTable> appointments = Vault.with(App.getInstance(), SampleSpace.class)
.fetch(SampleTable.class)
.where(SampleTable$Fields.DATE+"=?", mDateToCheck)
.all();
正常API
private final CDAClient client = CDAClient.builder().setToken(CDA_TOKEN).setSpace(SPACE_ID).build();
client.observe(CDAEntry.class).all()
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.subscribe(new Action1<CDAArray>() {
@Override
public void call(CDAArray entries) {
//business logic here
}});
感谢您的宝贵时间和帮助!!
我是 Contentful 中 Java 和 Android SDK 的维护者。
速度放缓可能有以下原因:
1) 你是syncing
很多数据
这意味着,在 Vault 案例中,必须从 Contentful 中获取大量数据,甚至可能是不同的页面、解析、序列化并放入数据库。
在这种情况下,看看通过 ID 获取条目而不使用同步可能是个好主意。遗憾的是,您会失去 Vault 模型的优点 类,并且需要自己实现从 Contentful 模型到自定义模型的映射。
2) ClassLoader.getResources
在您的代码片段中,您正在为每个同步调用重新创建 CDAClient
或 Vault
。这在 Android 上有一个 known issue,我们目前正在努力修复它。
目前,在发布更新之前,建议尝试查看在字段中存储 Vault
and/or CDAClient
是否对后续调用有帮助。
3) 网速慢
遗憾的是,这意味着我们无能为力......;)
我希望这能给你一些建议,关于解决方案,请随时报告你遇到的任何进展。
我找到的解决此问题的唯一方法是使用 Contentful Preview API。
所以当某个对象为modified/deleted/created时,响应速度将是相同的。也就是说,用户可以在 app/web.
中在一秒或更短时间内获取每个更新
问题是应用程序会显示已发布或未发布的条目(草稿),所以这取决于项目要求。
如果用户需要使用此解决方案,他必须使用 内容预览 API - 访问令牌,它位于 API 的顶部面板中Contentful 中的部分。希望对您有所帮助!
我是 contentful 的新手,我编写了一个 android 应用程序,它使用内容交付 API 从我的 space.
中获取内容我已经使用 Vault 和普通 API(没有 vault)来获取内容。
我观察到在获取增量更改(新内容和更新内容)时总是有 3-5 秒的延迟。
我的要求是提供实时数据同步。
这是我的实现问题还是 contentful 的预期行为。
示例代码: 1. 使用保险柜
Vault.with(App.getInstance(), SampleSpace.class).requestSync(
SyncConfig.builder()
.setClient(ClientProvider.get())
.setInvalidate(false)
.build());
List<SampleTable> appointments = Vault.with(App.getInstance(), SampleSpace.class)
.fetch(SampleTable.class)
.where(SampleTable$Fields.DATE+"=?", mDateToCheck)
.all();
正常API
private final CDAClient client = CDAClient.builder().setToken(CDA_TOKEN).setSpace(SPACE_ID).build(); client.observe(CDAEntry.class).all() .observeOn(AndroidSchedulers.mainThread()) .subscribeOn(Schedulers.io()) .subscribe(new Action1<CDAArray>() { @Override public void call(CDAArray entries) { //business logic here }});
感谢您的宝贵时间和帮助!!
我是 Contentful 中 Java 和 Android SDK 的维护者。
速度放缓可能有以下原因:
1) 你是syncing
很多数据
这意味着,在 Vault 案例中,必须从 Contentful 中获取大量数据,甚至可能是不同的页面、解析、序列化并放入数据库。
在这种情况下,看看通过 ID 获取条目而不使用同步可能是个好主意。遗憾的是,您会失去 Vault 模型的优点 类,并且需要自己实现从 Contentful 模型到自定义模型的映射。
2) ClassLoader.getResources
在您的代码片段中,您正在为每个同步调用重新创建 CDAClient
或 Vault
。这在 Android 上有一个 known issue,我们目前正在努力修复它。
目前,在发布更新之前,建议尝试查看在字段中存储 Vault
and/or CDAClient
是否对后续调用有帮助。
3) 网速慢
遗憾的是,这意味着我们无能为力......;)
我希望这能给你一些建议,关于解决方案,请随时报告你遇到的任何进展。
我找到的解决此问题的唯一方法是使用 Contentful Preview API。 所以当某个对象为modified/deleted/created时,响应速度将是相同的。也就是说,用户可以在 app/web.
中在一秒或更短时间内获取每个更新问题是应用程序会显示已发布或未发布的条目(草稿),所以这取决于项目要求。
如果用户需要使用此解决方案,他必须使用 内容预览 API - 访问令牌,它位于 API 的顶部面板中Contentful 中的部分。希望对您有所帮助!