Глеб
Что там надо делать с тестами? Там же завязано на хэндлер.
ща не у компа, короче там завязано на arcexecutor(да под капотом хэндлер) есть гугловый саппорт-тест екстеншн, его подключаешь и в тесте одно специальное юнит-rule пишешь и всё. Этот rule внутри - переподставляет archexecotor реализацию на свою тупую линейную(синхронную), и livedata ничего не подозревая)) начинает работать без проблем, тока в прямом....плоском режиме.👍
Глеб
других завязок на андроид там нет, всё работает из jvm
Глеб
Спасибо.
пожалуйста https://proandroiddev.com/how-to-unit-test-livedata-and-lifecycle-components-8a0af41c90d9
Sergey
Кто пользуется firebase от google на сколько это удобно и какова производительность?
Мумитроль
Подсесть на иглу называемую firebase
ROMAN
бывают проблемные места но в целом всё отлично.
ROMAN
Баги фиксят допиливают
ROMAN
Если нужно быстро запилить продукт. С минимальным бюджетом самое-то.
ROMAN
По производительности проблем тоже нет меня держал 50.000 пользователей онлайн. Без каких-либо проблем.
ROMAN
В одном проекте тестил Firebase Cloud Firestore Она сейчас в бете, но тоже работает норм. Если большая вложенность данных то лучше использовать её
Kirill
там много всего
ROMAN
Использовал вочти все что есть. Но имел введу реалтайм датабейс
Kirill
50к юзеров
ROMAN
Около 350$ за месяц выходило
Kirill
знатно
Kirill
а cloud functions как тебе?
ROMAN
а cloud functions как тебе?
В продакшене не юзал не могу сказать
Stas
кто-нибудь юзал Native Ads Advanced? Как там доход и за что вообще капает ?
Ivansuper
Кто-то работал с Toolbar и Action Mode в одном месте? не могу обойти проблему того, что Action Mode вклинивается в верхнюю часть иерархии View и встает над Toolbar
Ivansuper
windowActionBarOverlay=true не предлагать, уже стоит
Ivansuper
Вопрос снимается. Надоело, послал в задницу Toolbar.
Alexander
Кто знает как открывать drawer поверх system barа
Alexander
Чтоб drawer его перекрывал а не наоборот
Valentin
Чтоб drawer его перекрывал а не наоборот
<item name="android:windowDrawsSystemBarBackgrounds">true</item>         <item name="android:statusBarColor">@android:color/transparent</item>         <item name="android:windowTranslucentStatus">true</item> Добавить в app theme
Alexander
Спасибо
Dyno
я видел, что картинки в drawable-nodpi засовывают, не подскажите почему?
Dyno
почему не в drawable
Dyno
просто
Dyno
или лучше такую папку удалить?
Сергій
почему не в drawable
По умолчанию drawable это mdpi. И если положить туда большую картинку на экранах с высокой плотностью она сильно увеличится и с высокой вероятностью будет оом или просадки производительности
Gerc
c пятого андроида тачи юзера тоже в отдельном потоке от главного как и анимации?
Глеб
Не, не всё как было в майне так и осталось. Фокус с рендер-тредом - по-сути потому и не афишируется, что заюзать его девелоперу особо никак))
Глеб
рендер тред для анимаций запилен не более чем для визуального отклика по кнопкам и контролам иными словами если ты по клику в листенер поставишь слип у тебя всё зависнет, как и раньше.....тока теперь ripple-эффект всё таки будет отыгран до конца
Gerc
Не, не всё как было в майне так и осталось. Фокус с рендер-тредом - по-сути потому и не афишируется, что заюзать его девелоперу особо никак))
тогда не пойму откуда IndexOutOfBoundsException: Inconsistency detected. Invalid item position 12(offset:12).state:13 при скролле. и главное повторить не могу через new Handler().postDelayed(new Runnable() { int pos; @Override public void run() { recyclerView.scrollToPosition(pos++); new Handler().postDelayed(this, 90); } }, 10);
Глеб
эээ брат, это другая беда...
Глеб
чисто ресайклеровская
Gerc
и такие краши только с 5ого андроида
Глеб
неконсистентные позиции - это когда ты в момент смены контента, к этому же контенту по индексу ломишься
Ivansuper
Почему ты говоришь "не могу повторить через Handler"? А исходно какой код падает?
Gerc
Почему ты говоришь "не могу повторить через Handler"? А исходно какой код падает?
at android.support.v7.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:5817) at android.support.v7.widget.GapWorker.prefetchPositionWithDeadline(GapWorker.java:285) at android.support.v7.widget.GapWorker.flushTaskWithDeadline(GapWorker.java:342) at android.support.v7.widget.GapWorker.flushTasksWithDeadline(GapWorker.java:358) at android.support.v7.widget.GapWorker.prefetch(GapWorker.java:365) at android.support.v7.widget.GapWorker.run(GapWorker.java:396) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:211) at android.app.ActivityThread.main(ActivityThread.java:5371)
Ivansuper
Не надо трогать контролы с других потоков, плюс не надо менять контент адаптера напрямую в стеке коллбеков адаптера. И надо не забывать уведомлять адаптер об изменениях контента. В этом случае проблем не будет
Глеб
ну ... типа того)) а как быстрый хак - может поможет, setAnimator(null)
Gerc
с главного потока все меняется
Глеб
там во многом аниматоры создают много-проходность просчётов
Ivansuper
Так не с главного и не надо менять
Глеб
в общем попробуй для начала, вырубить аниматор - что б смена списка - происходила атомарно, за раз. И там уже будет понятнее, где собсно "неконсистентность"
Gerc
без анимации уныло
Глеб
там же шь сто пятсот премудростей в этом ресайклере предиктивные анимации, пре-лайаут, пост-лэйаут эт блин целый мир))) со своими понятиями)) своей философией
Ivansuper
Герц, ответь на один вопрос, ты обращаешься к ресайклеру или адаптеру из не UI потока?
Gerc
блять конечно из уи
Глеб
без анимации уныло
так ты баг то хоть пофиксь, пусть ценой унылости)) а дальше уже разбирайся - как красивее решить, вернув анимации
Ivansuper
За мат по шапке. А к чему ты тогда говоришь "с главного потока все меняется"?
Глеб
Герц он правду спрашивает - такие фокусы обычно случаются когда из рабочих потоков трогают ресайклер
Gerc
За мат по шапке. А к чему ты тогда говоришь "с главного потока все меняется"?
потомучто ты пристал к этому А НЕ ИЗ ДРУГОГО ЛИ ПОТОКА МЕНЯЕШЬ. нубские вопросы
Ivansuper
Тут фигурировал вопрос про RenderThread и фраза "с главного потока все меняется". Поэтому и спрашиваю
Ivansuper
Герц, кхм, ты помощи хочешь или что?
Gerc
хочу, но не для того чтоб элементарные вопросы про главный поток спрашивали
Ivansuper
Если ты пришел к другим за помощью, не посылай их нахер пожалуйста. Ты мог допустить мелочную ошибку, которую сам не видишь. Решение проблемы ищут от простого к сложному
Ivansuper
И я тебя попросил выше код, а не стек ошибки
Глеб
позицию откуда получаешь?
Gerc
вот я и пришел со сложной проблемой, думал не будут справшивать нубские вопросы про изменение не из главного потока, и спросил не из другого потока ли тачи стали, т.к сэмулировать через хандлер не могу этот эксепшен
Ivansuper
Так. Если у тебя ко мне что то личное, тогда решайте. Я ливаю
Gerc
позицию откуда получаешь?
с главного потока через recyclerView.getLayoutManager().findViewByPosition
Глеб
аааа тачи! всё! я понял
Глеб
не не не не так
Глеб
вот именно в этом то и беда
Глеб
ща... сек
Глеб
короче у ресайклера есть два позишна, адаптер позишн и лэйаут позишн
Глеб
ща.... лучше пусть спецы нормально расскажут (где-то было ща скину)
Gerc
короче у ресайклера есть два позишна, адаптер позишн и лэйаут позишн
не, это внутренний краш в ресайклере, предположительно падает при scrollToPositionWithOffset + notifyDataSetChanged и когда юзер скроллит список одновременно. вот я засунул в разные postDelayed эти методы и не могу уронить с таким эксепшеном
Глеб
https://medium.com/@haydar_ai/better-way-to-get-the-item-position-in-androids-recyclerview-820667d435d4
Anonymous
Что-то при редактировании стринг xml часто эдитор крашится. Это студия тупит или руки кривые?