Стратегия загрузки данных Android с помощью ViewPager2 и TabLayout

#android #performance #retrofit2 #android-networking #android-viewpager2

Вопрос:

Скажем, я собираюсь загрузить две таблицы данных с веб-сервера, categories и items :

 data class Category(val id: Long)
data class Item(val id: Long, val name: String, val categoryId: Long)
 

Затем заполните данные в ViewPager2 и TabLayout , как показано ниже:

введите описание изображения здесь


У меня есть две стратегии для этого:

Стратегия 1: Запросите все данные сразу, реорганизуйте данные по коду (фильтрация, сортировка…), затем передайте соответствующие данные ( items ) на каждую страницу Fragment .

Стратегия 2: Запрашивайте соответствующие данные для каждой страницы (по categoryId ), что означает, что веб-сервер будет выполнять фильтрацию и сортировку, и каждый Fragment запрашивает свои данные индивидуально.

Какая стратегия лучше? Заранее спасибо.

Ответ №1:

Лучше субъективно — это очень сильно зависит от данных, которые вы собираетесь получить, и показателей, которые важны для ваших пользователей.

Если у вас есть небольшой объем данных, то извлеките их все одним вызовом api и разделите на устройстве — об этом гораздо проще думать и намного проще кодировать. Вероятно, это также будет быстрее написать, поэтому, если вы хотите быстро выпустить что-то, это, вероятно, лучший подход.

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

Если вы хорошо спроектируете api своего веб — сервера, вы можете сделать так, чтобы одна и та же конечная точка api решала оба подхода, т. Е. Параметры фильтрации/сортировки могут быть необязательными. Это позволит вам создать и выпустить подход с одним вызовом (не передавая никаких параметров конечной точке api и просто получая все данные), а затем, если этого недостаточно, вы можете выпустить другую версию своего приложения, которая выполняет фильтрацию на стороне сервера.