配置AsyncTask以在自动完成搜索中使用的最佳方法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了配置AsyncTask以在自动完成搜索中使用的最佳方法相关的知识,希望对你有一定的参考价值。
我在SearchView的onQueryTextChange方法中调用AsyncTask并在列表中显示结果。搜索有效,但如果用户在搜索视图中快速输入,则偶尔会挂起一秒钟。我想进一步优化这种方法。由于它是一个自动完成搜索,当用户开始输入时,几个AsyncTasks排队等待执行。但我只对最后一次搜索请求感兴趣。
目前,我正在做这样的事情
if (myAsyncTask != null)
myAsyncTask.cancel(true);
myAsyncTask = new MyAsyncTask(context,URL);
有一个更好的方法吗?如果可能的话,我想做这样的事情
myAsyncTask.executeOnExecutor(new OptimizedExectionerService);
Optimized ExecutorService类应取消池中所有挂起和正在运行的任务,并且只处理最后发出的请求。
答案
使用具有合理延迟的处理程序(处理在edittext中的输入)。
private static final int SEARCH_DELAY = 500;
private Handler mHandler = new Handler();
private SearchRunnable executeSearch = new SearchRunnable();
private queueSearch(String term) {
// Remove any previous searches
mHandler.removeCallbacks(executeSearch);
// Set the search term for the runnable
executeSearch.setSearchTerm(term);
// Schedule the search in half a second
mHandler.postDelayed(executeSearch, SEARCH_DELAY);
}
private class SearchRunnable implements Runnable {
String searchTerm = null;
public void setSearchTerm(String term) {
searchTerm = term;
}
@Override
public void run() {
//Execute Search here
new MyAsyncTask(context, searchTerm);
}
};
以上是关于配置AsyncTask以在自动完成搜索中使用的最佳方法的主要内容,如果未能解决你的问题,请参考以下文章