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 ответов

9 просмотров

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

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 все дела

+

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

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

Вот оно да

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

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

Типа вызывать GetParent и проверять на соответствие GetModuleHandle?
The Bird of Hermes
67
Всем привет! Кто нибудь парсил в ручную JSON без библиотек и фреймворков? Есть может ссылки на оптимальный алгоритмы работы с текстом и примеры таких парсеров?
Lem
27
Do any of you guys have interesting projects one could join? I'm a Middle Full-Stack developer (JS/TS, React & Node)
Lev Shapiro
40
Есть сайт. Там была древняя версия эво. Стоял плагин, который каждый коммент в Jot делал отдельной страницей. После обновления все слетело, теперь старница открывается отдельн...
Artem
1
$res = json_decode($наша строка из респонса); $res1 = array_map(fn($o) => $o->name, $res->breadcrumbs[0]->entities); Как такое будет на Хаскеле?.. В начале весь джейсон, в ко...
Хаскель Моисеевич Гопник
27
Вопрос по диагностике ошибок (я знаю в чем, в данном конкретном примере, я знаю, как исправить, пример модельный, понятно, что в реальности бывает намного запутаннее). module...
ⰄⰎⰋⰐⰐⰑⰛⰤⰧⰧⰩⰄ ⰊⰑⰁⰓⰡⰛⰦⰕⰫ
11
А чем вам питонисты не угодили?😂
.
79
В чем сила брат, в NASM или FASM?
Isaac Kleiner
18
Есть какой-нибудь для Delphi/FPC T*Compression(Decompression)Stream на базе LZ4/Zstd/любой другой быстрый(и хорошо сжимающий) алгоритм А ещё лучше в pure pascal А ещё лучше од...
notme
52
Приветствую всех. Хочу начать изучать код для программирования микроконтроллеров и не пойму с чего начать. То ли с Си, то ли с плюсов. Чем языки вообще различаются. С чего мож...
Андрей
7
Карта сайта