gpt4 book ai didi

android - 在 Android 中使用本地存储使用 Parse 查询效率

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:00:47 25 4
gpt4 key购买 nike

我的问题很简单,当我想查询保存的对象时,使用本地存储使用 Parse 的最佳方法是什么。

直接在主线程上触发对本地存储的多个查询并避免嵌套大量匿名类或使用后台线程更好吗?

需要注意的重要一点是,此方法将被非常频繁地调用,并且该模式将在多个不同查询的地方重复出现。我正在评估可读性方面的效率和代码质量。这些方法将被同步调用,因此我们可以假设数据在任何时候都是一致的。

由于对象是在本地保存的,所以我希望查询的响应速度非常快。这是两种情况下代码的粗略示例。

选项一:

public void processBatches() { 
ParseQuery<Batch> batchQuery = Batch.getQuery();
int batchCount = batchQuery.fromLocalDatastore().count();
List<Batch> batches = batchQuery.fromLocalDatastore().find();
for(Batch b : batches) {
// do whatever I need to do
}
}

选项二:

public void processBatches() { 
ParseQuery<Batch> batchQuery = Batch.getQuery();
int batchCount = batchQuery.fromLocalDatastore().countInBackground(new CountCallback() {
@Override
public void done(int i, ParseException e) {
if (i > 0) {
batchQuery.findInBackground(new FindCallback<Batch>() {
@Override
public void done(List<Batch> list, ParseException e) {
for (Batch batch : list) {
// do whatever I need to do
}
}
});
}
}
});
}

最佳答案

因为在选项一中您阻塞了 UI 线程,所以用户与您的应用程序交互的能力可能会有所延迟。这不是一个很好的选择,因为即使只是片刻,用户也不想等待,除非他们知道操作正在发生。但是,如果您知道在任何时候都不会有任何延迟,那就去做吧。

尽管如此,我认为选项二将是最佳选项。这是因为一般而言,所有网络操作都应在后台执行。尽管在您的情况下您正在执行本地数据存储查询,但假设用户已经转到他们的应用程序任务管理器并清除了数据(这种情况很少发生)当您从本地数据存储执行查找和处理 Batch 对象时现在会发生什么?好吧,应用程序崩溃了。同样,对于您的应用程序的可用性而言,这不是一个很好的选择。

选择第二个选项,如果从本地数据存储查询中找不到任何内容,则允许 AsyncThread 对网络运行 find() 和 count() 查询操作。此外,从 Parse 文档中查找:

public Task<List<T>> findInBackground()
Retrieves a list of ParseObjects that satisfy this query from the source in a background thread.
This is preferable to using ParseQuery.find(), unless your code is already running in a background thread.

Returns:
A Task that will be resolved when the find has completed.

Parse 的创建者更喜欢他们的 API 的用户使用后台线程来执行操作。

关于android - 在 Android 中使用本地存储使用 Parse 查询效率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30539624/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com