Как я могу запустить действие поиска в другом потоке?

Я пишу приложение с виджетом searchview и использую конфигурацию searchable.xml и SearchActivity для поиска и отображения результатов, ожидающих запроса из виджета SearchView, в соответствии с этим руководством: http://developer.android.com/guide/topics/search/search-dialog.html Все работает нормально, однако есть некоторая задержка между моментом, когда пользователь нажимает кнопку ввода для поиска, и временем отображения SearchActivity. Я закомментировал алгоритм поиска и оставил только текстовое представление в SearchActivity, но отставание все равно было. Можно ли запустить SearchActivity в другом потоке или что-то в этом роде, чтобы отображать SearchActivity только тогда, когда он полностью инициализирован?


person user3282954    schedule 05.07.2015    source источник
comment
Значит, задержка не из-за вашего алгоритма поиска?   -  person Abdul Rahman K    schedule 05.07.2015
comment
Да, это не так. Я думаю, что задержка может быть из-за скрытия клавиатуры, потому что, когда клавиатура скрыта, в области, где была клавиатура, есть какой-то фон, и когда это очищается, начинается новая активность.   -  person user3282954    schedule 05.07.2015
comment
ты в симуляторе бегаешь?   -  person Abdul Rahman K    schedule 05.07.2015
comment
Нет.. на физическом устройстве.   -  person user3282954    schedule 05.07.2015
comment
Попробуйте запустить на более быстром устройстве, я полагаю, что затухание клавиатуры определяется Android, и для запуска алгоритма поиска вы можете использовать асинхронную задачу.   -  person Abdul Rahman K    schedule 05.07.2015
comment
Если ответ решил вашу проблему, вы можете принять его, чтобы другие могли знать, что это ответ, когда они находятся в такой же ситуации.   -  person Abdul Rahman K    schedule 18.07.2015


Ответы (1)


AsyncTask используется для выполнения процесса, который вы хотите отделить от пользовательского интерфейса и отобразить результат в пользовательском интерфейсе.

Ссылаться:

Асинхронная задача

person Abdul Rahman K    schedule 05.07.2015
comment
поиск и ожидание результата асинхронной задачи также будет означать задержку. потому что метод get() будет ждать завершения задачи. см. здесь - person Sebastian Walla; 05.07.2015
comment
Использование асинхронной задачи решило проблему, но создало другую. Мне нужно иметь возможность мгновенно отменить запущенную задачу и начать новую, если пользователь решит выполнить новый поиск, пока предыдущий еще не завершен. Вызов отмены() в асинхронной задаче отменяет ее как можно скорее, но не сразу, что для меня недостаточно. В итоге я использовал класс Executor. - person user3282954; 19.07.2015
comment
Хорошо, что вы использовали класс Executor. Потрясающий ход. Пожалуйста, добавьте это как ответ, чтобы он мог помочь другим - person Abdul Rahman K; 19.07.2015