Сделайте свой фурор больше, чем просто брендинг

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

Когда мне следует использовать заставку?

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

Предварительная загрузка данных

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

Не блокировать: время ожидания

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

Пока мы ждем, мобильные возможности заполняют пробелы.

Никто не хочет ждать, пока они ждут

- Майк Кригер, соучредитель Instagram

Асинхронная загрузка данных с помощью RxJava 2

Что бы вы ни делали во время заставки, RxJava упрощает выполнение правильных действий.

Одна из звезд в RxJava 2 - объект Completable. Completable работает так же, как Observable, за исключением того, что мы не ожидаем никаких результатов. Что здесь замечательно, так это то, что любой Observable или Single можно преобразовать в Completable. Посмотрим, как это выглядит:

Таймауты

Но что, если ваш запрос не выполняется или занимает слишком много времени? Как было сказано ранее, вам необходимо внести залог по этому запросу, если он занимает слишком много времени. К счастью, операция timeout в RxJava упрощает это. Для этого вы можете добавить в нашу цепочку всего одну строчку:

Асинхронная загрузка

Вы не хотите блокировать поток пользовательского интерфейса, поэтому выполнение этой работы в фоновом режиме является обязательным. Здесь вы убедитесь, что работа запланирована в потоке ввода-вывода, и принудительно верните ее в поток пользовательского интерфейса, чтобы вы могли обработать пользовательский интерфейс, когда он будет завершен. Этот шаг особенно важен, потому что наша операция тайм-аута вызывает ошибки в вычислительном потоке! Решить эти проблемы - это всего лишь два звонка.

Много потоков, много операций

Если вам нужно выполнить несколько задач, подождите, пока все они будут выполнены, прежде чем закончить. Мы не хотим делать их по очереди. Запуск их всех одновременно может не только повысить скорость, но также улучшить читаемость и снизить сложность.

RxJava поставляется с методом для этой цели: Completable.merge, который запускает несколько завершаемых объектов одновременно и позволяет вам подписаться на результат всех из них. Однако слияние создает одну проблему: если какой-либо из имеющихся у вас элементов приводит к ошибке, он запускает наш метод onError и завершает наш экран-заставку. Вы хотите, чтобы у других наших задач была возможность успешно завершиться, даже если одна из них не удалась.

Это можно сделать с помощью метода Completable.mergeAndDelayError в RxJava. Это позволит запускать любое количество завершаемых объектов одновременно, задерживая ошибки до тех пор, пока не будут завершены все наши завершаемые объекты.

Минимальное время отображения

Последнее касание: в случае, если наши данные загружаются очень быстро, вы не хотите, чтобы заставка мерцала в течение доли секунды. Это будет выглядеть сломанным и запутанным для пользователей. Итак, вы хотите, чтобы заставка отображалась не менее полсекунды. Вы можете сделать это с помощью метода delay RxJava в нашей объединенной таблице Completable:

И это все! У вас есть функциональный экран-заставка!

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