AutoCompleteTextView: сначала загрузите список, затем выполните запрос на клиенте или обновите его с помощью асинхронных вызовов?

У меня есть действие, которое содержит AutoCompleteTextView.

Этот AutoCompleteTextView представляет собой список из тысяч и тысяч записей.

Есть 2 возможных решения:

1-сначала загрузите огромный список и заполните AutoCompleteTextView.

2-асинхронные вызовы, когда пользователь пишет и обновляет адаптер AutoCompleteTextView динамически.

Кроме очевидных минусов 1 и 2 (огромная нагрузка на клиент в 1 и огромная нагрузка на сервер в 2). Какое решение является наиболее оптимальным и наиболее учитываемым при рассмотрении такого случая?

1 ответ

  1. 1-сначала загрузите огромный список и заполните AutoCompleteTextView.

    Лучше всего, если вы загрузите данные » вне » приложения с a SyncAdapterи обновить локальную базу данных SQLite, так что AutoCompleteTextViewможет использовать a CursorAdapterдля получения данных. Это хороший вариант, если ваш список не сильно меняется. Тем не менее, это требует всей сложности обслуживания локальной базы данных и использованияSyncAdapter, включая автоматическую проверку подлинности, возможно, с помощью пользовательского средства проверки подлинности.

    2-асинхронные вызовы, когда пользователь пишет и обновляет адаптер AutoCompleteTextView динамически.

    Это то, что мы делаем в нашем приложении; я бы рекомендовал этот подход. Вот некоторые указатели:

    • Ограничьте количество результатов, которые вы отправляете на любой запрос, скажем, около двадцати. В нашем приложении некоторые общие элементы запрашиваются чаще, чем другие, поэтому мы приоритизируем результаты, чтобы включить эти элементы. Ваш пользователь не собирается прокручивать очень далеко через список в любом случае; если нужный элемент не включен, они могут ввести другой символ или два, чтобы получить его.

    • Поставьте таймер AutoCompleteTextViewтак, чтобы пользователь должен был остановить ввод на 200-250 миллисекунд перед отправкой запроса на сервер. Это поможет гарантировать, что запрос отправляется только тогда, когда это необходимо, и сократит пропускную способность сервера.