Лучшая практика при загрузке данных для представления в фоновом потоке без задержки - PullRequest
0 голосов
/ 10 января 2012

Приложение Android имеет два действия.

Действие A показывает список элементов.Упражнение B показывает некоторые подробности о конкретном элементе.

Детали загружаются из большой базы данных SQLite.Запросы, используемые для генерации данных, занимают от 250 до 500 миллисекунд на приемлемом телефоне.

Мой вопрос заключается в том, как лучше всего загружать данные, обеспечивая при этом хороший пользовательский опыт.

Текущая активностьB выполняет AsyncTask при его создании.Когда задача завершается, она создает несколько представлений и добавляет их на экран.В потоке пользовательского интерфейса данные не загружаются.

Для пользователя действие B открывается с красивой стандартной анимацией масштабирования, а затем через долю секунды представление заполняется данными.Это выглядит немного дерьмово IMO.

Другой вариант - загрузить данные в поток пользовательского интерфейса.Если я сделаю это в нужное время, то экран зависнет с выбранным элементом списка на 250 мс, пока данные загружаются, а затем вид меняется со стандартной анимацией масштабирования, но масштабируется в уже заполненном виде.Это выглядит намного лучше, но я блокирую поток пользовательского интерфейса, который не идеален.

Каков наилучший способ добиться хорошего перехода, когда новый вид еще не готов?

1 Ответ

2 голосов
/ 10 января 2012

Либо поставьте progress dialog для загрузки задачи данных, а если нет, то ..

Вы можете использовать onProgressUpdate() метод вашего AsyncTask для промежуточного обновления полученных вами данных из базы данных в пользовательский интерфейс..

 protected void onProgressUpdate(Integer... progress) { 
        //this runs in UI thread so its safe to modify the UI 
        myTextField.append("finished call " + progress); 
    } 

•onProgressUpdate - вызывается всякий раз, когда publishProgress вызывается из фоновой задачи, используется для отчета о ходе выполнения обратно в пользовательский интерфейс.

Также вы можете использовать LIMIT и OFFSET предложение sqlite database для извлечения данных из базы данных с ограниченным числом возвращаемых результатов в вашем select query для извлечения большого количества данных из базы данных ..

Пример:

Select * from Animals LIMIT 100 OFFSET 50 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...