Nikolay
он не для инстанса синглтона явно + в “небольших” проэктах его нету такого профита юзать
Дак есть же профит от DI - взял и потестил вьюмодел, а не сидишь и думаешь как инстанс синглтона подменить 😁
Nikolay
в данном случае я бы сидел и писал код с даггером)
я в целом про подход внедрения зависимостей ;)
Никита 🙃
А кто может подсказать. Вот есть Activity, у неё лейаут вида: ConstarintLayout ——FrameLayout ——Button Во FrameLayout есть некий фрагмент с editText'ом В итоге когда открывается клавиатура, то эта кнопка поднимается вместе с кнопкой: https://prnt.sc/okdd80 Кто подскажет, как сделать так, что бы эта кнопка не поднималась над клавой?
🐈 гав-гав
я в целом про подход внедрения зависимостей ;)
я на самом деле не юзал нигде его, много статей читал, но не юзал)
🐈 гав-гав
а вообще google-> how to up button with keyboard android
Alex
Привет! Кто-нибудь знает, на какой либе графиков сделан TabTrader?
Jacob
Подскажите плз есть ли какойто класс конвертер от гугла из livedata в observable? Вроде что-то было не найду(
Aleksey
Привет! Кто-нибудь знает, на какой либе графиков сделан TabTrader?
Скачай APK, вскрой архиви посмотри, чьи там зависимости валяются
Aleksey
Привет! Кто-нибудь знает, на какой либе графиков сделан TabTrader?
Или, если разрабы православные, могли туда в лицензию включить ссылки на использованные библиотеки
Alex
Обычно decompile делаю, но тут защита. Чем apk смотрите?
Andrew
Или, если разрабы православные, могли туда в лицензию включить ссылки на использованные библиотеки
Обычно только католики включают. Православные говорят, что сами всё делали )
Anonymous
Здравствуйте 1) Запускаю Service || JobService через startService || startForegroundService для android Oreo || ContextCompat.startForegroundService 2) в onCreate методе сервиса делаю startForeground(1, notification), и в onDestroy делаю stopForeground(false) В onCreate методе сервиса запускается BroadcastReceiver, для получение событий TelephonyManager.EXTRA_STATE - {OFFHOOK, RINGING, IDLE} Вот код для регистраций ресивера applicationContext.registerReceiver(broadcastReceiver, IntentFilter(TelephonyManager.ACTION_PHONE_STATE_CHANGED), Manifest.permission.CALL_PHONE, null) Сразу же после запуска сервиса я вызываю val intent = Intent(Intent.ACTION_DIAL) intent.data = Uri.parse("tel:+77787020453") startActivity(intent) И начинаю звонить В логах сервса получаю 18:38:17.008 I/main >>>>: Unstoppable: onCreate ✅ 18:38:17.013 4371-4371/me.myapp I/main >>>>: UnstoppableJob: onStartCommand ✅ 18:38:17.231 4371-5110/me.myapp I/main >>>>: Unstoppable - 1 ✅ 18:38:18.730 4371-5110/me.myapp I/main >>>>: Unstoppable - 2 ✅ 18:38:19.082 4371-4371/me.myapp I/Unstoppable: blockCallReciever: onRecieve: ✅ 18:38:19.082 4371-4371/me.myapp I/Unstoppable: android.intent.action.PHONE_STATE = OFFHOOK ✅ 18:38:21.715 5169-5169/? I/main >>>>: Unstoppable: onCreate ⁉️ 18:38:21.741 5169-5169/? I/main >>>>: UnstoppableJob: onStartCommand ⁉️ 18:38:21.947 5169-5231/? I/main >>>>: Unstoppable - 1 ⁉️ 18:38:24.114 5242-5242/me.myapp I/main >>>>: Unstoppable: onCreate ⁉️ 18:38:24.145 5242-5242/me.myapp I/main >>>>: UnstoppableJob: onStartCommand ⁉️ Unstoppable - 1, Unstoppable - 2 - это я таймер запустил чтобы отслежевать работает сервис или нет в реальном времени. Не могу понять почему в сервисе вызывается сново onCreate без вызова onDestroy, кто может мне помоч это решить и сделать так чтобы сервис работал стабильно при совершение вызова?
尺囗从丹廾
Здравствуйте 1) Запускаю Service || JobService через startService || startForegroundService для android Oreo || ContextCompat.startForegroundService 2) в onCreate методе сервиса делаю startForeground(1, notification), и в onDestroy делаю stopForeground(false) В onCreate методе сервиса запускается BroadcastReceiver, для получение событий TelephonyManager.EXTRA_STATE - {OFFHOOK, RINGING, IDLE} Вот код для регистраций ресивера applicationContext.registerReceiver(broadcastReceiver, IntentFilter(TelephonyManager.ACTION_PHONE_STATE_CHANGED), Manifest.permission.CALL_PHONE, null) Сразу же после запуска сервиса я вызываю val intent = Intent(Intent.ACTION_DIAL) intent.data = Uri.parse("tel:+77787020453") startActivity(intent) И начинаю звонить В логах сервса получаю 18:38:17.008 I/main >>>>: Unstoppable: onCreate ✅ 18:38:17.013 4371-4371/me.myapp I/main >>>>: UnstoppableJob: onStartCommand ✅ 18:38:17.231 4371-5110/me.myapp I/main >>>>: Unstoppable - 1 ✅ 18:38:18.730 4371-5110/me.myapp I/main >>>>: Unstoppable - 2 ✅ 18:38:19.082 4371-4371/me.myapp I/Unstoppable: blockCallReciever: onRecieve: ✅ 18:38:19.082 4371-4371/me.myapp I/Unstoppable: android.intent.action.PHONE_STATE = OFFHOOK ✅ 18:38:21.715 5169-5169/? I/main >>>>: Unstoppable: onCreate ⁉️ 18:38:21.741 5169-5169/? I/main >>>>: UnstoppableJob: onStartCommand ⁉️ 18:38:21.947 5169-5231/? I/main >>>>: Unstoppable - 1 ⁉️ 18:38:24.114 5242-5242/me.myapp I/main >>>>: Unstoppable: onCreate ⁉️ 18:38:24.145 5242-5242/me.myapp I/main >>>>: UnstoppableJob: onStartCommand ⁉️ Unstoppable - 1, Unstoppable - 2 - это я таймер запустил чтобы отслежевать работает сервис или нет в реальном времени. Не могу понять почему в сервисе вызывается сново onCreate без вызова onDestroy, кто может мне помоч это решить и сделать так чтобы сервис работал стабильно при совершение вызова?
вырвиглазно
Николай
Господа что могло случиться? работало норм все до этого, ребилд и клин не помогают.
D‌mitriy
Господа что могло случиться? работало норм все до этого, ребилд и клин не помогают.
Попробуй закоменить в градле зависимости, синк, потом раскоментить и синк
Anonymous
Здравствуйте 1) Запускаю Service || JobService через startService || startForegroundService для android Oreo || ContextCompat.startForegroundService 2) в onCreate методе сервиса делаю startForeground(1, notification), и в onDestroy делаю stopForeground(false) В onCreate методе сервиса запускается BroadcastReceiver, для получение событий TelephonyManager.EXTRA_STATE - {OFFHOOK, RINGING, IDLE} Вот код для регистраций ресивера applicationContext.registerReceiver(broadcastReceiver, IntentFilter(TelephonyManager.ACTION_PHONE_STATE_CHANGED), Manifest.permission.CALL_PHONE, null) Сразу же после запуска сервиса я вызываю val intent = Intent(Intent.ACTION_DIAL) intent.data = Uri.parse("tel:+77787020453") startActivity(intent) И начинаю звонить В логах сервса получаю 18:38:17.008 I/main >>>>: Unstoppable: onCreate ✅ 18:38:17.013 4371-4371/me.myapp I/main >>>>: UnstoppableJob: onStartCommand ✅ 18:38:17.231 4371-5110/me.myapp I/main >>>>: Unstoppable - 1 ✅ 18:38:18.730 4371-5110/me.myapp I/main >>>>: Unstoppable - 2 ✅ 18:38:19.082 4371-4371/me.myapp I/Unstoppable: blockCallReciever: onRecieve: ✅ 18:38:19.082 4371-4371/me.myapp I/Unstoppable: android.intent.action.PHONE_STATE = OFFHOOK ✅ 18:38:21.715 5169-5169/? I/main >>>>: Unstoppable: onCreate ⁉️ 18:38:21.741 5169-5169/? I/main >>>>: UnstoppableJob: onStartCommand ⁉️ 18:38:21.947 5169-5231/? I/main >>>>: Unstoppable - 1 ⁉️ 18:38:24.114 5242-5242/me.myapp I/main >>>>: Unstoppable: onCreate ⁉️ 18:38:24.145 5242-5242/me.myapp I/main >>>>: UnstoppableJob: onStartCommand ⁉️ Unstoppable - 1, Unstoppable - 2 - это я таймер запустил чтобы отслежевать работает сервис или нет в реальном времени. Не могу понять почему в сервисе вызывается сново onCreate без вызова onDestroy, кто может мне помоч это решить и сделать так чтобы сервис работал стабильно при совершение вызова?
https://toster.ru/q/651972
Николай
invalidate cache and restart? И всё ли ОК в project structure?
в project structure норм, сейчас попробую invalidate cache
Николай
invalidate cache and restart? И всё ли ОК в project structure?
Спасибо, это решило проблему))
Олег
глупый вопрос есть fragment, layout которого состоит из одного recyclerView код фрагмента public View onCreateView(...) { return inflater.inflate(R.layout.recycler_view, container, false); }код recycler_view.xml <?xml version="1.0" encoding="utf-8"?> <androidx.recyclerview.widget.RecyclerView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@id/recycler_view" android:layout_width="match_parent" android:layout_height="match_parent" android:clipToPadding="false"/>могу ли я сохранить ссылку на этот ресайклер в onCreateView, т.е. public View onCreateView(...) { mRecycler = inflater.inflate(R.layout.recycler_view, container, false); return mRecycler; }
Николай
Просто зачем это)))
Олег
при ручном создании TextView всё ок
Олег
Просто зачем это)))
чтобы не делать тяжеловесный findViewById
Руслан
Всем привет, ребят а как поиск таких комбинации возможно сделать в книге ?)
Руслан
Denis
чтобы не делать тяжеловесный findViewById
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) // view - твой recycler }
Олег
а в чём будет разница между двумя подходами?
Denis
а в чём будет разница между двумя подходами?
ну просто зачем держать ссылку, когда можно не держать)
Изам
добрый день, кто занает, как вывести контент под StatusBar? я пробовал и "fitssystemwindows" и программный способ. Первый случай вообще не помог, а второй охватывает и нижнюю область (где кнопки навигации)
Олег
логично, спасибо
Anton
Всем привет! Guys, кто с EXO Player плотно работал: Не подскажите с чем может быть связана следующая проблема? - в проекте на одном экране видос + превьюшки плей-листа - клик по плейлисту переключает videoUrl (в связи с чем меняется DataSource и вызывается player.prepare()). Переключение идёт в рамках 1 инстанса SimpleExoPlayer - если юзер начинается очень быстро кликать по плейлисту - то вылетает такой exception из недр ExoPlayer (на Samsung J7 / A-серии довольно быстро это происходит) - `Caused by: android.media.MediaCodec$CodecException: Error 0xffffec77` - `com.google.android.exoplayer2.mediacodec.MediaCodecRenderer$DecoderInitializationException: Decoder init failed: OMX.Exynos.avc.dec, Format(1, null, null, video/avc, null, -1, null, [1280, 720, -1.0], [-1, -1])` На StackOverflow рекомендуют такие вещи: - w/h видоса кратна 16 - переиспользовать 1 инстанс SimpleExoPlayer (иначе ломается из-за длительного создания декодеров), не делать player.stop() (т.к. декодер не будет переиспользован)
Anna
Всем привет! Guys, кто с EXO Player плотно работал: Не подскажите с чем может быть связана следующая проблема? - в проекте на одном экране видос + превьюшки плей-листа - клик по плейлисту переключает videoUrl (в связи с чем меняется DataSource и вызывается player.prepare()). Переключение идёт в рамках 1 инстанса SimpleExoPlayer - если юзер начинается очень быстро кликать по плейлисту - то вылетает такой exception из недр ExoPlayer (на Samsung J7 / A-серии довольно быстро это происходит) - `Caused by: android.media.MediaCodec$CodecException: Error 0xffffec77` - `com.google.android.exoplayer2.mediacodec.MediaCodecRenderer$DecoderInitializationException: Decoder init failed: OMX.Exynos.avc.dec, Format(1, null, null, video/avc, null, -1, null, [1280, 720, -1.0], [-1, -1])` На StackOverflow рекомендуют такие вещи: - w/h видоса кратна 16 - переиспользовать 1 инстанс SimpleExoPlayer (иначе ломается из-за длительного создания декодеров), не делать player.stop() (т.к. декодер не будет переиспользован)
у нас похожая задача. плеер singleton, делаем стоп и запускаем новый видос setPlayWhenReady. но плейлист храним у себя - то есть не используем внутренний плейлист, не помню почему отказались.
Anton
у нас похожая задача. плеер singleton, делаем стоп и запускаем новый видос setPlayWhenReady. но плейлист храним у себя - то есть не используем внутренний плейлист, не помню почему отказались.
Спасибо за наводку! Попробую сменить: player.stop() player.playWhenReady = true А с прода похожие stack-trace (OMX.Exynos.avc.dec ...) не прилетали? Почему-то в официальном репозитории по схожим крашам (https://github.com/google/ExoPlayer/issues/1286, https://github.com/google/ExoPlayer/issues/5799) https://medium.com/google-exoplayer/improved-decoder-reuse-in-exoplayer-ef4c6d99591d рекомендуют не стопать видео чтобы на подобный баг не нарваться (типо иначе не будут переиспользованы Decoders, а на некоторых девайсах [samsung J7/бюджетные A-series] под них маловато места)...
Anton
нет. не помню таких ошибок, хотя samsung юзаем
Во всяком случае- благодарю за фидбэк! у нас этот проект просто "легаси", возможно архитектурно что-то не докручено (хотя неск раз выверял) Тут ещё специфика - что юзер может довольно быстро прокликивать плей-лист держа видос по 2-3сек (этот юзер - QA заказчика:) )
Stanly
Всем привет! У кого-то есть опыт работы с build.gradle ? Буду признателен за помощь https://stackoverflow.com/questions/57198163/gradle-how-to-execute-both-testinstrumentationrunners-at-the-same-time
Сергей
граждане, а вот есть прием "унаследовать класс от Application, что бы в нем был всегда доступен контекст приложения и можно было хранить еще данные, которые не убьются" - это дурь или "а чо, все так делают"? И с чем этот класс уместно совместить? с репозиторием? или нинада совмещать?
Anton
Эм, а где этот самый ди все это держит?)
На как минимум код читабельней и понятнее, а не уйма обращений к App.getXxx()
Сергей
ViewModel-ей же несколько может/должно быть? под каждую активность
Сергей
речь про данные приложения в целом
Vladimir
На как минимум код читабельней и понятнее, а не уйма обращений к App.getXxx()
Так по итогу то все это и хранит тот самый App. Хотя я наверное не правильно тебя понял ) мне показалось, что ты имел в виду в целом использование App дурью
Artemiy
но только до первого onCleared()
Да, но если владелец activity, то и onCleared() вызовется только при уничтожении активности - для глобальных вещей подойдет, а иначе по новой данные грузить из сети или из базы
Denis
onDestory на активити на него не влияет
Artemiy
ViewModel-ей же несколько может/должно быть? под каждую активность
Single Activity приложение лучше делать - тогда все вопросы отпадут сами собой
Artemiy
Сергей
ну сингл активити это да, логично
Anton
Так по итогу то все это и хранит тот самый App. Хотя я наверное не правильно тебя понял ) мне показалось, что ты имел в виду в целом использование App дурью
Да, чуток уточню явно - App обычно только для "инициализационных штук" (краши/аналитика/di/отладочное/...) Боль когда туда пихают ещё: - закешенный access_token юзера - кэш подгруженных из сети данных - последнее значение разных переменных с разных экранов получается прям рассадник для багов из-за "всё в одну кучу"
Сергей
ок, понял. Но держать там ссылку на инстансы репозитория вроде норм.
Vladimir
ок, понял. Но держать там ссылку на инстансы репозитория вроде норм.
Лучше использовать ди. А так держать там можно что угодно
Сергей
ну, с ДИ то понятно что оно для этого и есть
Andrey
Всем привет! У меня при определенных обстоятельствах сворачивается приложение. Я не могу понять из-за чего это происходит. Нужно писать постоянно логи в файл, тк не знаю в какой момент это может произойти. Кто-нибудь подскажет как писать системные логи приложения в файл?
Печенье
adb logcat > log_file.txt
Anonymous
У меня у одного Firebase глючит и я не могу новый проект создать или у всех такая же проблема?😒
Anonymous
Может кто проверить?
Andreu
У меня у одного Firebase глючит и я не могу новый проект создать или у всех такая же проблема?😒
Пару дней назад не привязывался к приложению, но потом все стало ок
Andrey
adb logcat > log_file.txt
как это сделать регулярным?
Andrey
через grep
не понял...
Konstantin
регулярным выражением? или что
Andrey
регулярным выражением? или что
мне нужно эти логи постоянно писать в файл (можно перезаписывая)
Konstantin
мне нужно эти логи постоянно писать в файл (можно перезаписывая)
так а то что тебе скинули не работает что ль?
Konstantin
логкат же эт клиентская часть, цепляется к серверу адб, ждет пока адб начнет ему присылать логи из устройства, и не умирает пока сам не убьешь, а > перенаправляет вывод из терминала в файл, где я тебя не так понял? )