Я пишу приложение с виджетом searchview и использую конфигурацию searchable.xml и SearchActivity для поиска и отображения результатов, ожидающих запроса из виджета SearchView, в соответствии с этим руководством: http://developer.android.com/guide/topics/search/search-dialog.html Все работает нормально, однако есть некоторая задержка между моментом, когда пользователь нажимает кнопку ввода для поиска, и временем отображения SearchActivity. Я закомментировал алгоритм поиска и оставил только текстовое представление в SearchActivity, но отставание все равно было. Можно ли запустить SearchActivity в другом потоке или что-то в этом роде, чтобы отображать SearchActivity только тогда, когда он полностью инициализирован?
Как я могу запустить действие поиска в другом потоке?
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
поиск и ожидание результата асинхронной задачи также будет означать задержку. потому что метод
get()
будет ждать завершения задачи. см. здесь
- person Sebastian Walla; 05.07.2015
Использование асинхронной задачи решило проблему, но создало другую. Мне нужно иметь возможность мгновенно отменить запущенную задачу и начать новую, если пользователь решит выполнить новый поиск, пока предыдущий еще не завершен. Вызов отмены() в асинхронной задаче отменяет ее как можно скорее, но не сразу, что для меня недостаточно. В итоге я использовал класс Executor.
- person user3282954; 19.07.2015
Хорошо, что вы использовали класс Executor. Потрясающий ход. Пожалуйста, добавьте это как ответ, чтобы он мог помочь другим
- person Abdul Rahman K; 19.07.2015