Size: a a a

Android Developers

2020 January 09

ОА

Оганнес Асатрян in Android Developers
Женя
привет! Если ли возможность кастануть класс на Any в котлин ?
Тебе в чат котлин
источник

QH

Quantum Harmonizer in Android Developers
Оганнес Асатрян
Тебе в чат котлин
нет, в формулирование вопросов
источник

ОА

Оганнес Асатрян in Android Developers
Quantum Harmonizer
в случае с андроидным клиентом — нет, на гитхабе старый код
Вот и все
источник

QH

Quantum Harmonizer in Android Developers
кто «все»?
источник

ОА

Оганнес Асатрян in Android Developers
Quantum Harmonizer
кто «все»?
Доебался)) вот и всё
источник

A

Aba in Android Developers
поправил мессагу. Поддержка mimo
источник

ОА

Оганнес Асатрян in Android Developers
Aba
Интересует наличие у wifi поддержки mimo
Страшна, прекращай
источник

А

Александр in Android Developers
А ответьте пж вот на што.
У меня SingleActivity аппликация. При запуске приложения в container посредством replace сеттится фрагмент со сплешом. Сплеш забирает данные с апи, кеширует их и даёт команду на отображение фрагмента с контентом, который сеттится аналогично через replace.

Есть такой кейс, что если запустить апку и сразу её свернуть, а затем развернуть через какое - то время (т.е дождаться пока сплеш прогрузит данные и даст команду на переход), то я упаду с:

java.lang.IllegalStateException: FragmentManager is already executing transactions

Я это пофиксил. Я пользуюсь своим на коленке написанным навигатором, который который сеттит фрагменты используя commitNow(). Апка перестала падать, когда я заменил commitNow() на commitAllowingStateLoss().
Однако я нихрена не понял что произошло, объясните пж.

Как ни странно, мой кейс нифига не гуглится. Поэтому приходится думать головой, а эт чёт сложно.

Я знаю, что commitNow() - синхронный, а commitAllowingStateLoss() - ассинхронный. Но мне это не говорит ни о чём. В теории, мб есть какая - то связь с  тем что приложение свёрнуто и тем что вызов был именно синхронный, но чёт сомнения одолевают. В доках ничего явно не сказано на этот счёт.

Я залез чуть глубже, и увидел что этот эксепшн бросает FragmentManager ручками. Вот блок кода:

private void ensureExecReady(boolean allowStateLoss) {
       if (mExecutingActions) {
           throw new IllegalStateException("FragmentManager is already executing transactions");
       }

Логика там вроде как примерно такая: запускается транзакция, флаг сеттится в true, транзакция завершается, флаг сеттится в false. Это предположение, т.к отдебажить это я не могу - дебаггер слетает когда я апку сворачиваю, а то что я успеваю отдебажить - это ад, там этот флаг 100500 раз дёргается, нифига не понятно.

Собственно, догадок покамест нет. Моя транзакция по установке сплеша завершается успешно(скорее всего), т.к я его вижу прежде чем апку свернуть.

Шо происходет?

В моём коде нет ничего интересного, но пущай будет.

fun replaceNewFragment(screen: Screen, animationType: AnimationType? = null) {
       fragmentManager
          .beginTransaction()
          .setCustomAnimations(R.anim.anim1,R.anim.anim2)
           .replace(container, screen.getFragment(), screen.getTag())
           .commitNow()
   }
источник

А

Александр in Android Developers
💥
источник

VP

Vladimir Polkhovtsev in Android Developers
Напомните, пожалуйста, список чатов в ТГ для программистов!🙏
источник

А

Александр in Android Developers
Метод уточки не помогает ><
источник

С

Села in Android Developers
Vladimir Polkhovtsev
Напомните, пожалуйста, список чатов в ТГ для программистов!🙏
Для каких программистов?
источник

A

Anton in Android Developers
Quantum Harmonizer
в случае с андроидным клиентом — нет, на гитхабе старый код
источник

QH

Quantum Harmonizer in Android Developers
Vladimir Polkhovtsev
Напомните, пожалуйста, список чатов в ТГ для программистов!🙏
источник

l

lc3 in Android Developers
Друзья, как пофиксить такую багу, ресурсы с тегами типа "<b>test</b>
выводит tv.setText(getText(R.string.test1)) норм.. а так tv.setText(getText(R.string.test1)+"@@@@@@@@@") перестают работать теги((
источник

VP

Vladimir Polkhovtsev in Android Developers
Благодарю🙏
источник

SO

Sergey Opivalov in Android Developers
> Как ни странно, мой кейс нифига не гуглится. Поэтому приходится думать головой, а эт чёт сложно.
Все гуглится, это распространенная проблема
> Я знаю, что commitNow() - синхронный, а commitAllowingStateLoss() - ассинхронный.
commit/commitAllowingStateLoss - асинхронные, тоже самое с приставкой Now - синхронные.
Гугли, куча инфы по этому кейсу
источник

SO

Sergey Opivalov in Android Developers
Александр
А ответьте пж вот на што.
У меня SingleActivity аппликация. При запуске приложения в container посредством replace сеттится фрагмент со сплешом. Сплеш забирает данные с апи, кеширует их и даёт команду на отображение фрагмента с контентом, который сеттится аналогично через replace.

Есть такой кейс, что если запустить апку и сразу её свернуть, а затем развернуть через какое - то время (т.е дождаться пока сплеш прогрузит данные и даст команду на переход), то я упаду с:

java.lang.IllegalStateException: FragmentManager is already executing transactions

Я это пофиксил. Я пользуюсь своим на коленке написанным навигатором, который который сеттит фрагменты используя commitNow(). Апка перестала падать, когда я заменил commitNow() на commitAllowingStateLoss().
Однако я нихрена не понял что произошло, объясните пж.

Как ни странно, мой кейс нифига не гуглится. Поэтому приходится думать головой, а эт чёт сложно.

Я знаю, что commitNow() - синхронный, а commitAllowingStateLoss() - ассинхронный. Но мне это не говорит ни о чём. В теории, мб есть какая - то связь с  тем что приложение свёрнуто и тем что вызов был именно синхронный, но чёт сомнения одолевают. В доках ничего явно не сказано на этот счёт.

Я залез чуть глубже, и увидел что этот эксепшн бросает FragmentManager ручками. Вот блок кода:

private void ensureExecReady(boolean allowStateLoss) {
       if (mExecutingActions) {
           throw new IllegalStateException("FragmentManager is already executing transactions");
       }

Логика там вроде как примерно такая: запускается транзакция, флаг сеттится в true, транзакция завершается, флаг сеттится в false. Это предположение, т.к отдебажить это я не могу - дебаггер слетает когда я апку сворачиваю, а то что я успеваю отдебажить - это ад, там этот флаг 100500 раз дёргается, нифига не понятно.

Собственно, догадок покамест нет. Моя транзакция по установке сплеша завершается успешно(скорее всего), т.к я его вижу прежде чем апку свернуть.

Шо происходет?

В моём коде нет ничего интересного, но пущай будет.

fun replaceNewFragment(screen: Screen, animationType: AnimationType? = null) {
       fragmentManager
          .beginTransaction()
          .setCustomAnimations(R.anim.anim1,R.anim.anim2)
           .replace(container, screen.getFragment(), screen.getTag())
           .commitNow()
   }
.
источник

ОА

Оганнес Асатрян in Android Developers
lc3
Друзья, как пофиксить такую багу, ресурсы с тегами типа "<b>test</b>
выводит tv.setText(getText(R.string.test1)) норм.. а так tv.setText(getText(R.string.test1)+"@@@@@@@@@") перестают работать теги((
Юзай метод с аргументами
источник

А

Александр in Android Developers
Sergey Opivalov
> Как ни странно, мой кейс нифига не гуглится. Поэтому приходится думать головой, а эт чёт сложно.
Все гуглится, это распространенная проблема
> Я знаю, что commitNow() - синхронный, а commitAllowingStateLoss() - ассинхронный.
commit/commitAllowingStateLoss - асинхронные, тоже самое с приставкой Now - синхронные.
Гугли, куча инфы по этому кейсу
источник