Andrey
но я админ
Знаешь, что с админами в КС было?
You
админ джавы?
Админ интернета
Andrey
Админ интернета
Ну, это серьезно, но нет
Andrey
там были админы?
Ещё какие, серьезные, 12-летние
Ярослав
как это контрить? обернул табы в доп LinearLayout, всем подряд выставил clipToPadding true
Gregory
(я тоже делал такой таббар, у меня оно за его пределы не вылазило)
Ярослав
getBroadcast
бродкаст только в манифесте описал? если да, то попробуй создать его же в активити и зарегистрировать в бродкаст менеджере (в onDestroy не забудь unрегистрировать его же, тот же инстанс)
Ярослав
(я тоже делал такой таббар, у меня оно за его пределы не вылазило)
такая фигня появилась недавно, после обновления либы
Gregory
такая фигня появилась недавно, после обновления либы
Ну у меня без либ, всё руками сделал за 5 минут)
Ярослав
Ну у меня без либ, всё руками сделал за 5 минут)
у библиотечного бихевьёр есть, который скрывает/показывает бар при скроллинге
Ярослав
Ну у меня без либ, всё руками сделал за 5 минут)
у мя кстати тоже кастом, библиотечный только этот, BottomBar
Ярослав
как это контрить? обернул табы в доп LinearLayout, всем подряд выставил clipToPadding true
Я НАШЁЛ, нужно контейнеру бара задать фон, любой, хоть прозрачный
Anonymous
постоянно получаю эту ошибку в Firebase Crashlytics Fatal Exception: android.app.RemoteServiceException: Context.startForegroundService() did not then call Service.startForeground() at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1881) at android.os.Handler.dispatchMessage(Handler.java:105) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:6944) at java.lang.reflect.Method.invoke(Method.java) at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)это означает что не запустился уведомление для явного сервися ил что, понять не могу, что можно сделать? У меня в сервисе после startForegroundService, в методе onCreate запускает startForeground().
Batirov
Всем привет! Уважаемые девелоперы скажите пожалуйста какими сервисами пользуйтесь для продвижения своих приложений?
Anonymous
мб ты стопишь незапущенный сервис?
что может означать незапущенный?
Yerlan
что может означать незапущенный?
покажи лучше mvp, может кто увидит ошибку )
Dmytro
gist, pastebin удоли это, невозможно читать
George
всем привет, подскажите пожалуйста как вынести цикл в другой поток и с каждой итерацией вызывать метод с переданными данными? у меня 40 итераций в который создаются 40 листов и каждый раз этот лист передается в метод для отрисовки колонки
Turalllb
Нужна помощь. Фрагмент сохранен в менеджере, я текущий фрагмент заменяю этим через replace. В фрагменте в вертикальном ресайклере лежат горизонтальные. Я делаю поиск по позиции вертикального, потом в горизонтальном и нахожу нужную вью, даю ей фокус, она принимается его. ПОтом теряет, так как все вьюхи ил конкретно эта(но скорее все) удаляются. Вот стекТрейс. Интересен был метод detachAndScrapAttachedViews(recycler) на хабре нашел такое описание: Этот метод убирает все view из нашего лэйаута и помещает их в свой специальный scrap-кэш. При необходимости можно вернуть view, используя метод recycler.getViewForPosition(pos).
Turalllb
может я немного рано обращаюсь к вьюхам.. но когда позже то..
Dmytro
может я немного рано обращаюсь к вьюхам.. но когда позже то..
СКажи честно, это последний раз когда ты связался с приложением для теликов?
Turalllb
СКажи честно, это последний раз когда ты связался с приложением для теликов?
нет, потому что я понял, что каждая проблема имеет логичное обоснование, просто плохо все задокументировано. И я почти все сделал, остались нестыковки в самом жизненном цикле приложения. Я тупо не знаю в какой момент вьюхи готовы принимать фокус. А то либо я рано, они отказываются принимать, либо рано. Ну и еще минус, что код который решает принимать фокус или нет ну очень плохо дебажится, а местами из-за каких то ошибок комплиятора или дебагера стопы не ставятся (крестики вместо них). А так я считаю я победил фокусы, пусть не все методы понял связанные с фокусами осознал, но достаточно, чтобы управлять ими.
Arsen
может алгоритм кривой или ты достиг предела девайса
Arsen
профилируй на ботлнеки
George
может алгоритм кривой или ты достиг предела девайса
ща подумаю еще, https://gist.github.com/George0099s/4322359b22de56efd0c8e93db0acc6fa глянь гист если есть время там 20 строк, мб подсказать чтото сможешь
George
профилируй на ботлнеки
а можно подробней, что гуглить? не понля что это вообще
Arsen
ну твоя проблема в том, что кадры проседают или че?
Arsen
или просто нефига не работает?
Astar
Добрый день. Подскажите как в Room Database сделать так что бы запись добавлялась только одна уникальная без дубликатов
George
ну твоя проблема в том, что кадры проседают или че?
Кадры проседают, duration 2700 Скипает по 100 фреймов
Arsen
ботлнек - горлышко бутылки - проблемное место - медленный участок кода. Есть разные способы измерять (профилировать приложение) например сколько процессорного времени тратится на исполнение кода
Astar
Primary key задать для записи какой то
Не ну это понятно. У меня на id есть PrimaryKey, но другие поля все равно могут быть одинаковыми у двух или нескольких записей..
Arsen
а еще асинктаск - говно мамонта, уже не используют, глянь лучше екзекуторСервисы/рх/корутины и т.д.
George
а еще асинктаск - говно мамонта, уже не используют, глянь лучше екзекуторСервисы/рх/корутины и т.д.
изза чего может пропускаться метод? просто игнорируется, а по нажатию кнопки работает
Arsen
изза чего может пропускаться метод? просто игнорируется, а по нажатию кнопки работает
логируй те места, откуда он вызывается, может проблема еще раньше
George
логируй те места, откуда он вызывается, может проблема еще раньше
в том то и дело что все отрабатывает, тосты логи, даже log самого метода отработал, но он не отработал, метод с отрисовкой связан, и получается что он быстрее срабатывает чем отрисуется вью
Aniki
А есть четкое объяснение в чем была проблема асинктаска?
Ivansuper
Спорная гибкость предоставленного апи
Vadim
1. Многословность 2. Стремное API
3. Несоответсвие принципам SOLID 4. Легко получить утечки памяти
Denis
3. Несоответсвие принципам SOLID 4. Легко получить утечки памяти
3. Какому именно принципу? 4. Так же, как и с другими инструментами для асинхронности)
Vadim
3. Single responsibility 4. Ок ладно, тогда: 5. Все асинктаски работают на одном потоке
Сергій
5 можно менять
Denis
3. Single responsibility 4. Ок ладно, тогда: 5. Все асинктаски работают на одном потоке
где он нарушает этот принцип? Их можно запустить на разных потоках
Vadim
Чем плох AsyncTask? Все знают, что AsyncTask – это плохо и лучше его не использовать. На собеседовании могут спросить, почему это так. 1. Для того, чтобы использовать AsyncTask, нужно создать наследника этого класса. Использование через наследование требует написание бойлерплейт кода и не является гибким механизмом. 2. AsyncTask нарушает принцип единственной ответственности, т.к. выступает и классом, который выполняет бэкграунд задачу, и коллбэком, получающим результат. 3. Неудачный API. Часто работа с бэкграунд тредом в андроид-приложениях – это запрос в сеть или базу данных. Для обработки результата достаточно методов onSuccess() и onError(). AsyncTask предоставляет обычно ненужные коллбэки onPreExecute() и onProgressUpdate(), а также метод onPostExecute(), который вызывается в случаях и успешного выполнения, и ошибки. Это требует писать больше бойлерплейта. 4. На разных версиях андроида выполнение нескольких AsyncTask реализовано по-разному: • До Api level 4 использовался единственный тред и все AsyncTask выполнялись по очереди. • Начиная с Api level 4 и до 11 использовался тред пул и AsyncTask выполнялись параллельно. • Начиная с Api level 11 снова начали использовать единственный тред. Такие изменения вызывали путаницу и баги в приложениях. #OS
Сергій
> Использование через наследование требует написание бойлерплейт кода и не является гибким механизмом. AAAAAaa...
Станислав
Ребята, кто работал с новым Billing Client? При инициализации ссылаюсь на текущий активити. Приложение падает. billingClient = BillingClient.newBuilder(this).setListener(this).build();
Denis
Чем плох AsyncTask? Все знают, что AsyncTask – это плохо и лучше его не использовать. На собеседовании могут спросить, почему это так. 1. Для того, чтобы использовать AsyncTask, нужно создать наследника этого класса. Использование через наследование требует написание бойлерплейт кода и не является гибким механизмом. 2. AsyncTask нарушает принцип единственной ответственности, т.к. выступает и классом, который выполняет бэкграунд задачу, и коллбэком, получающим результат. 3. Неудачный API. Часто работа с бэкграунд тредом в андроид-приложениях – это запрос в сеть или базу данных. Для обработки результата достаточно методов onSuccess() и onError(). AsyncTask предоставляет обычно ненужные коллбэки onPreExecute() и onProgressUpdate(), а также метод onPostExecute(), который вызывается в случаях и успешного выполнения, и ошибки. Это требует писать больше бойлерплейта. 4. На разных версиях андроида выполнение нескольких AsyncTask реализовано по-разному: • До Api level 4 использовался единственный тред и все AsyncTask выполнялись по очереди. • Начиная с Api level 4 и до 11 использовался тред пул и AsyncTask выполнялись параллельно. • Начиная с Api level 11 снова начали использовать единственный тред. Такие изменения вызывали путаницу и баги в приложениях. #OS
2 пункт абсолютно не понятен. Кто тогда должен получить коллбэк с результатом?)
Mike
а, хотя нет, не согласен new SimpleAsyncTask<String>( () -> "from background", (str) -> Toast .makeText(ctx, str, LENGTH_SHORT).show() );
Aleksey
Чем плох AsyncTask? Все знают, что AsyncTask – это плохо и лучше его не использовать. На собеседовании могут спросить, почему это так. 1. Для того, чтобы использовать AsyncTask, нужно создать наследника этого класса. Использование через наследование требует написание бойлерплейт кода и не является гибким механизмом. 2. AsyncTask нарушает принцип единственной ответственности, т.к. выступает и классом, который выполняет бэкграунд задачу, и коллбэком, получающим результат. 3. Неудачный API. Часто работа с бэкграунд тредом в андроид-приложениях – это запрос в сеть или базу данных. Для обработки результата достаточно методов onSuccess() и onError(). AsyncTask предоставляет обычно ненужные коллбэки onPreExecute() и onProgressUpdate(), а также метод onPostExecute(), который вызывается в случаях и успешного выполнения, и ошибки. Это требует писать больше бойлерплейта. 4. На разных версиях андроида выполнение нескольких AsyncTask реализовано по-разному: • До Api level 4 использовался единственный тред и все AsyncTask выполнялись по очереди. • Начиная с Api level 4 и до 11 использовался тред пул и AsyncTask выполнялись параллельно. • Начиная с Api level 11 снова начали использовать единственный тред. Такие изменения вызывали путаницу и баги в приложениях. #OS
пункт №4 устарел
Vadim
пункт №4 устарел
да и сам AsyncTask тоже Deprecated
Anton
Точно не помню какой
Mike
пункт №4 устарел
Вообще, конечно, за AsyncTask#execute надо бить по рукам, но всё равно интересно.
Mike
2 пункт абсолютно не понятен. Кто тогда должен получить коллбэк с результатом?)
Глянь любой другой механизм асинхронности — retrofit.Call, CompletableFuture
Aleksey
Почему же?
что-то мне подсказывает, что никто не ставит у себя 11-ый API уже
Mike
что-то мне подсказывает, что никто не ставит у себя 11-ый API уже
А, ну информация в пункте от этого не перестаёт быть правдой.
Aleksey
А, ну информация в пункте от этого не перестаёт быть правдой.
да, но не использовать же это как аргумент, когда все 16+ ставят
Mike
У меня уже 21
Держи в курсе
Станислав
enablependingpurchases
Что это? Не вижу в доке…
Станислав
Ребята, кто работал с новым Billing Client? При инициализации ссылаюсь на текущий активити. Приложение падает. billingClient = BillingClient.newBuilder(this).setListener(this).build();
По оф доке нихрена не могу понять. Даже попробовал по этой статье настроить. Нихрена не работает https://habr.com/ru/post/444072/
Anton
https://developer.android.com/reference/com/android/billingclient/api/BillingClient.Builder#enablependingpurchases