当一个新字符添加到输入框时,取消正在进行AsyncTask的获取建议并使用新参数开始一个新字符。并向用户指示正在加载建议,以便用户可以选择等待,如果他愿意。
这是一篇解释取消的理想方法的帖子AsyncTask:取消正在执行的 AsyncTask的理想方法
更新:
如果您缓存第一个字符输入时的所有结果(无需取消),您可以随着用户在编辑框中键入更多字符而逐渐加快速度Asynctask,因为这将是初始列表,其中包含从第一个开始的所有字符串特点。以下所有结果(在新字符上,即第 2、第 3 ..)将是此列表的子集。使用 管理列表ArrayAdapter。编辑框应该是一个AutoCompleteTextView。
这样,您只需要为第一个字符运行 asynctask。
更新 2:
您可以在onCreate. 听起来是个更好的选择。。
AutoCompleteTextView act =
(AutoCompleteTextView)findViewById(R.id.act_contact);
ContentResolver content = getContentResolver();
Cursor cursor = content.query(
ContactsContract.Contacts.CONTENT_URI,
PEOPLE_PROJECTION, null, null, null);
ContactListAdapter adapter = new ContactListAdapter(this, cursor);
act.setAdapter(adapter);