更新UI时响应键盘

Gre*_*OBO 5 performance android android-keypad android-search

我正在使用android.support.v7.widget.SearchView,我正在搜索SearchView中的每个字符的输入.以下是片段.

searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener()
            {

                @Override
                public boolean onQueryTextSubmit(String query)
                {
                    return false;
                }

                @Override
                public boolean onQueryTextChange(String newText)
                {

                    if (!newText.trim().equals(""))
                    {
                     displayResult(newText);
                    return false;
                   }
              }
            });
Run Code Online (Sandbox Code Playgroud)

当我获得结果时,我正在更新UI,因此在我的情况下,每当用户输入单个字符时,它将调用Search API.因此,假设用户想要搜索"澳大利亚"并尝试输入整个单词,但我的UI正在使用搜索进行更新,而用户只是在键盘没有响应后键入"Aus",因为它正在更新UI.

所以我想只是想在更新UI时回复键盘.
希望我会得到快速反应.

Joh*_*Dev 1

问题的关键是使用搜索 API 的结果更新 UI 操作以及使用键盘响应 SearchView 都是在Main(UI) Thread中完成其工作。

简而言之,你让主线程在短时间内做了太多的事情。

所以解决办法就是尽量限制更新UI操作的频率。我的意思是,当用户在短时间内连续输入单词时,您应该让该displayResult(newText)方法可以取消先前的调用。

当整个单词完全输入后,只需用结果更新 UI一次。Australia

顺便说一句,您的搜索 API 调用应该在后台线程中使用一些精彩的库(Retrofit && OkHttp)进行。