AutoCompleteTextView:首先加载列表然后在客户端查询或通过异步调用更新它?

AutoCompleteTextView : Load list first then query on client or update it through Async Calls?

我有一个包含 AutoCompleteTextView 的 activity。

这个 AutoCompleteTextView 是一个包含成千上万个条目的列表。

有 2 种可能的解决方案:

1- 首先加载巨大的列表并填充 AutoCompleteTextView。

2- 当用户动态编写和更新 AutoCompleteTextView 适配器时异步调用。

除了 1 和 2 的明显缺点(1 中客户端的巨大负载和 2 中服务器的巨大负载)。处理这种情况时最优化的方案和考虑最多的方案是什么?

1- Load the huge list first and populate the AutoCompleteTextView.

最好是使用 SyncAdapter 加载数据 "outside" 应用程序并更新本地 SQLite 数据库,这样 AutoCompleteTextView 可以使用 CursorAdapter 获取数据。如果您的列表变化不大,这是一个不错的选择。但是,它要求维护本地数据库和使用 SyncAdapter 的所有复杂性,包括无人值守的身份验证,可能使用自定义身份验证器。

2- Async Calls when the user is writing and updating the AutoCompleteTextView adapter dynamically.

这就是我们在应用程序中所做的;我会推荐这种方法。这里有一些建议:

  • 限制您在任何单个请求中发回的结果数量,比如大约 20 个。在我们的应用程序中,一些常见项目比其他项目更频繁地被请求,因此我们优先考虑结果以包括这些项目。无论如何,您的用户不会在列表中滚动太远;如果他们想要的项目不包括在内,他们可以输入另一个或两个字符来获得它。

  • AutoCompleteTextView 上放置一个计时器,这样用户必须在将请求发送到服务器之前停止输入 200-250 毫秒。这将有助于确保仅在必要时发送请求并减少服务器带宽。