处理搜索的最佳实践

And*_*oid 12 search android searchview otto

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

我想知道Android中的搜索或者任何移动应用程序的最佳实践是什么(意味着类似的东西也可以应用于iOS).

具体来说,我正在使用一个AutoCompleteTextView来处理我的建议,SearchView数据直接来自API.我不相信这是一种最佳实践,因为每次用户更改文本时SearchView都会启动API调用.

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

非常感谢有关Android中搜索的最佳架构或方法的任何想法.

Gen*_*kin 10

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

您可以使用HandlerpostDelayed调度搜索API调用方法.您可以使用Handler来控制消息队列.Runnable每次用户键入字符并取消以前的消息时,您都会发布延迟.看起来会这样:

public void onTextChanged(CharSequence s, int start, int before, int count) {
    handler.removeCallbacks(searchRunnable);
    handler.postDelayed(searchRunnable, 500);
}
Run Code Online (Sandbox Code Playgroud)


And*_*oid 0

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

首先我们需要问几个关于如何解决这个问题的问题:

  • 有自动补全功能吗?
  • 搜索范围是什么?
  • 会有缓存吗?

还有更多问题。

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

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