处理搜索的最佳实践

Best Practices for Handling Search

我有一个 SearchView 设置,我有一个使用 RetrofitOtto 的松散解耦架构。

我想知道 最佳实践 对 Android 中的搜索或一般的任何移动应用程序有何意义(这意味着类似的东西可以应用于 iOS)。

具体来说,我正在使用 AutoCompleteTextView 来处理我的 SearchView 中的建议,并且数据直接来自 API。我认为这不是最佳做法,因为每次用户更改 SearchView 中的文本时都会启动 API 调用。

我正在考虑在 SQLite 中存储缓存,然后从那里 ping 结果,但是如果用户想要最直接的数据怎么办?你会怎么处理?那会采用什么模式?

如果您对 Android 中搜索的最佳架构或方法有任何想法,我们将不胜感激。

我认为在用户停止输入之前进行 API 调用是没有意义的。因此,您可以延迟 500 毫秒。当用户停止输入时,500 毫秒后您将进行 API 调用并显示结果。

您可以使用 HandlerpostDelayed 方法安排搜索 API 调用。您可以使用 Handler 来控制消息队列。您 post 延迟 Runnable 每次用户键入一个字符并取消之前的消息。它将看起来像这样:

public void onTextChanged(CharSequence s, int start, int before, int count) {
    handler.removeCallbacks(searchRunnable);
    handler.postDelayed(searchRunnable, 500);
}
  • 首先你必须将列作为搜索属性的索引。
  • 您必须仅在 sqlite database.Its 上存储用户进行搜索时用于 table 选项的 select 列。
  • 然后您调用 api 搜索结果,在搜索栏中 select 字词之后。

所以为了充分回答这个问题,因为我对这里的其他答案不满意,所以在这个问题上还有几个步骤需要考虑。

首先,我们需要就如何解决这个问题提出几个问题:

  • 是否有自动完成功能?
  • 搜索的范围是什么?
  • 会有缓存吗?

还有更多问题。

我可能会首先构建一个自定义适配器来处理搜索中的查询,然后对用户的查询实施积极的缓存。这一点很重要,因为用户的查询非常重要。 Autocomplete 只使用缓存的结果可能是有意义的,实现自动完成并让它在每次文本更改时 ping 服务器是非常昂贵的。

缓存可以通过使用 Android 中的 SQLite 助手来完成。这可能很昂贵,但我们正在处理简单的查询对象,(因为这应该是 API 对象应该是内存或字节大小昂贵的)。