169 похожих чатов

В сплэш-активити выполняю предварительную подгрузку фотографии пользователя на фрагмент, прикрепленный

к основной активити, используя Glide. Иногда, а примерно, в 30% случаев активити не успевает подгружаться прежде, чем Glide пытается использовать контекст. Выдаёт ошибку: java.lang.NullPointerException: You cannot start a load on a not yet attached View or a Fragment where getActivity() returns null

Как лучше всего сделать?

56 ответов

16 просмотров

Грузить не во вью, а в файл

L D- Автор вопроса

Который после будет использован во время инициализации основной активити?

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

L D- Автор вопроса

А если активити начнёт грузить файл, которого ещё нет? Т.е не успеет быть загружен

У вас Splash отдельным экраном идет?

L D- Автор вопроса

А как иначе, но для него layout'а нет, а в теме задается изображение

если делаете через тему, так ставьте эту тему на главный экран

L D- Автор вопроса

Если я поставлю тему на главный экран, то моё "лого" станет задним фоном этого главного экрана, а не как отдельный кадр, скрывающий за собой подгрузку view

Смотря где вы это поставите

не читали статью как правильно делать splash?

L D- Автор вопроса

Смотря, о какой идёт речь. Вы об этом способе?

ога

L D- Автор вопроса

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

https://habr.com/ru/post/345380/

прочтете статью и все свои проблемы 2мя строчками решите

L D- Автор вопроса

По сути один из нужных способов мне использую. У меня главная цель скрыть подгрузку view для пользователя таким образом, чтобы и фрагмент подгрузки был получен своевременно (что исключило бы exception), и пользователь не видел никакой подгрузки. Но, судя по всему идеального способа нет, учитывая нек-ые популярные приложения. Подгружать в файл, а из файла в активити, это те же проблемы со синхронностью процесса

так а зачем Вы отдельный экран используете?

L D- Автор вопроса

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

Если задача сплеша - просто показать лого в момент загрузки - тогда просто backgroundDrawable для активити. Он покажется в процессе загрузки активити (векторные картинки нормально работают только с 6 андроида). Если задача спеша выполнить какие-то действия (после резюма приложения проверить стейт и определить, на какой экран идти, например, показать экран ввода пин кода, если прошло какое-то время, или перейтина экран авторизации) - тогда оптимальным будет отображать фрагмент (или DialogFragment)

Ваш пример не сработает. Первую секунду после запуска - экран будет черный/белый. Тоже статью не читали

L D- Автор вопроса

можно подробнее про векторные картинки и minAPI 23?

backgroundDrawable не сработает?

в первую секунду - нет

Видели как YouTube открывается?

векторные картинки на api 21 будут растягиваться на весь экран. Им нельзя задать размер через тему

L D- Автор вопроса

Очень важный факт, спасибо

Сорян, я имел ввиду windowBackground

Просто у тебя будет 2 разных drawable. Обычный условно <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item> <shape android:shape="rectangle"> <solid android:color="@color/colorWindowBackground" /> </shape> </item> <item android:bottom="120dp"> <bitmap android:gravity="center" android:src="@drawable/ic_splash_logo" /> </item> </layer-list> Где ic_splash_logo - это png. А в drawable-v23 файлик с таким же названием и уже может быть вектором

L D- Автор вопроса

drawable-v23 - файлы этой директории используются от API23, правильно понимаю?

да

Вы тоже используете для Splash отдельный экран? (Activity)

L D- Автор вопроса

Теперь понятно, зачем нужна та директория. А drawable-v24 - это для какой проблемы?

это для api = 24

L D- Автор вопроса

Я понимаю, а в API-24 какая особенность отображения в отличии от API <23 и API >23

а какая у них может быть особенность?

Активити не использую конечно. Раньше всегда использовал android:windowBackground. Но на последнем проекте мы используем DialogFragment т.к. windowBackground не удовлетворяет требованиям. А именно: после каждого резюма приложения нужно определить, на какой экран перевести пользователя в зависимости от некоторых условий (сделать это во время показа сплеша). Проблема с колд стартом решается максимальным облегчением UI треда. При желании можно сделать аналогичный windowBackground. Но придется слегка упороться из-за статус и навигейшн бара.

То же самое, только возмется для версий 24+

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

значит человек перепрыгнул главу про ресурсы. Не надо так было делать

Думаю проще объяснить, что чаще всего, туда помещают реализации для легаси

Ой а можете поподробнее рассказать по этому поводу либо мб есть статья или ещё чего?

https://habr.com/ru/post/345380/

Это нужно для того чтобы подстроить ресурсы под разные типы устройств. Ты можешь использовать разные комбинации: по версии, размеру экрана, ориентации, языку и др. Например, на моем pet project это выглядит так. Ну и лучше почитать в документации об этом

это ж для эксперемента? ужас какой)

Там с диалогфрагментом есть?

L D- Автор вопроса

Это всё понятно. Речь шла о том, для каких целей обособлено v21,v23,v26. Иначе можно было бы для каждой API по папке создать

нет, там про избежание дополнительной Activity

ну как ужас, это все правильно, хорошо. Но если был такой проект живой - жесть

У меня сейчас и так без сплэш Активити)

L D- Автор вопроса

Тему с ресурсами не пропускал)

В смысле ужас? Это для поддержки разных типов устройств. Телефонов, планшетов 7", 10", разных языков и др

В результате получилось приложение, которое рендерится на любых устройствах, RTL все дела

+

А собрать в мастер-папки желания не было?

Что за мастер папки? Я когда-то пробовал папки через прописание сорс сетов, но как-то не срослось

Вот оно да

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта