【发布时间】:2021-12-26 04:23:24
【问题描述】:
我有以下代码:
Handler mHandler = new Handler(); //global variable
searchAddress.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
mHandler.removeCallbacksAndMessages(null);
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
try {
List<Address> foundAddresses = gc.getFromLocationName(newText,10);
Log.e("res",foundAddresses.toString());
} catch (IOException e) {
e.printStackTrace();
}
}
}, 0);
return true;
}
});
问题是,当我尝试更改位置名称时,搜索视图字段总是有很大延迟。它不像 for 那样顺利运行。例如在谷歌地图中。
我尝试使用AynchTask,但结果比使用Handler 差得多。
有没有办法针对性能问题进一步优化我的代码? 现在它看起来太丑了,因为当输入一个字符时,在字符出现在搜索视图字段之前总是有 2 秒的延迟。
【问题讨论】:
-
Is there a way to optimize my code much more for performance issue?好吧,不确定这与性能有多大关系,如果这是一个 api 调用并且 api 调用需要 1-2 秒才能完成,那么您无能为力关于那个 -
@a_local_nobody 我猜谷歌会采取另一种方法吗?因为据我所知,他们使用相同的 api 更快地提供结果
-
是的,我猜这个实现使用了已经缓存的数据列表,当有人键入时,通过 api 调用搜索以 X 开头的所有位置是没有意义的,但是获取以 X 开头的大量位置列表然后根据用户键入的内容自动完成会更有意义。在这里询问图书馆建议是题外话,不建议人们给出这些建议,但是 Places api 使这种类型的操作非常简单,这取决于您的需要,也许它可以帮助您
标签: android performance handler geocoding searchview