Андрей
для аналитики просто в Application onCreate
Андрей
YandexMetrica.activate(context, YANDEX_ANALYTICS_KEY) YandexMetrica.enableActivityAutoTracking(context)
Андрей
и все
Mike
Не «и всё», потому что метрика стартует отдельный процесс.
Андрей
Не «и всё», потому что метрика стартует отдельный процесс.
да, но для программиста на этом всё, дальше только события отправлять
Aleksei
в каком смысле "и всё"? если я буду добавлять какую-то логику в onCreate, код отработает дважды, т.к. метрика стартует отдельный процесс, как верно указал Quantum
Андрей
хм, заинтересовали, пойду проверю
Nikita
И как чекать процесс метрики?
Андрей
но у меня так в продакшне, статистика корректная и проблем не видел
Yury
Все верно, нужно проверять процесс, т.к. новый процесс запускает еще раз Application.onCreate, а если у вас там какая то небезопасная для межпроцесса логика, то все сломается. Даже если не сломается, нет смысла инитить VkSDK например в процессе метрики.
Aleksei
что сейчас в принципе и происходит, когда я добавил запуск миграции с одной бд на другую - данные продублировались
Aleksei
каким образом можно проверить процесс, что он не "наш", а метрики?
Yury
Я так вроде бы делал https://gist.github.com/Tinker-S/2ecead050b2154ad6b10 , a processName потом проверил на endWith("metrica")
Mike
^ видимо, стоит взять на вооружение этот костыль. У них написано «Соответственно, если вы не хотите, чтобы некоторый код исполнялся больше одного раза, не следует помещать его в метод Application.onCreate().» (https://tech.yandex.ru/appmetrica/doc/mobile-sdk-dg/concepts/android-initialize-docpage/). В публичном API действительно нет метода для проверки процесса. Это дичь, стоит написать им об этом, пусть сделают как LeakCanary, например.
Alexey
Подскажите, в тузпике следующий код выдаст одинаковые скоупы или ошибку? Toothpick.openScope(1,2,3); Toothpick.openScope(2,3);
Nikita
Вроде как на сайте метрики написано что ничего страшного в этом нет
Nikita
Что два раза вызывается
Nikita
Создание БД в onCreate - плохое решение. Я для такого таска создал SplashScreen и там чекал версию базы
Mike
Создание БД в onCreate - плохое решение. Я для такого таска создал SplashScreen и там чекал версию базы
отличное решение, у нас же не iOS какой-нибудь, где приложения по полчаса грузятся)
Nikita
Ну замедливать запуск всегда плохо
Mike
Ну замедливать запуск всегда плохо
ну если тебе после обноления надо добавить одну колонку в базу из ста строк, заводить ради этого сплеш...
Aleksei
да и точек входа в приложение может быть несколько, хотелось бы иметь одно место для инициализации, а не добавлять во все места
Aleksei
что за сервис Application.onCreate() ?
Андрей
что за сервис Application.onCreate() ?
да не Application.onCreate() из сервиса
Андрей
перечитал все и понял
Андрей
короче аппметрика просто накладывает ограничение на использование Application.onCreate()
Андрей
и там больше нельзя класть код который не должен отработать больше 1ого раза
Vadim
Есть строка json нужно её десериализовать в List Это делается с помощью простой обработки json?
Vadim
в чём вопрос?
как десериализовать строку json в List<SomeClass>
Mike
как десериализовать строку json в List<SomeClass>
десериализатором) многие используют Gson, например.
Anonymous
Vadim Используй Gson + анотации
Андрей
Vadim Используй Gson + анотации
можно и без аннотаций в общем-то
Андрей
к чему они там?
Anonymous
проще ведь
Vadim
Vadim Используй Gson + анотации
что то типо? val gson = Gson() this.userData = gson.fromJson(userData, object : TypeToken<List<String>>() {}.type) где userData c аннотацей @Keep
Anonymous
https://habrahabr.ru/company/naumen/blog/228279/
Elron
Вопрос про котлин: если в котлине нет примитивов и одни объекты, то если var l: Long = 5L; l = 7 получается что создается новый объект ?
Андрей
Вопрос про котлин: если в котлине нет примитивов и одни объекты, то если var l: Long = 5L; l = 7 получается что создается новый объект ?
там почти всегда примитивы используются после компиляции, за исключением использования в коллекциях
Андрей
про это доклад был у Исаковой на KotlinConf
Андрей
https://www.youtube.com/watch?v=Uizh2WlJtnk
Андрей
??? там объясняется во что типы котлина компилятся
Андрей
это как раз и отвечает на вопрос будет создаваться отдельный объект на var l: Long = 5L; например или нет
Andrew
adb push
Спасибо, проверю
Anna
интересно, а есть ли такое d.util.Patterns.EMAIL_ADDRESS.matcher(email).matches() для пароля, который должен содержать одну цифру и один символ?
Mike
интересно, а есть ли такое d.util.Patterns.EMAIL_ADDRESS.matcher(email).matches() для пароля, который должен содержать одну цифру и один символ?
это неудобно делать регулярками, проще самостоятельно пробежать по строке в поисках нужных символов
Кирилл
Давай о Java будем писать в @jvmchat
Pavel
Всем привет!  Снова прошу консультации у сообщества) Задача - написать простенький прототип для стриминга видео с телефона на сервер.  Поскольку хотелось обойтись без больших временный затрат, мы сначала нашли модуль для nginx, который позволяет стримить видео в HLS формате (https://github.com/arut/nginx-ts-module). Попробовали записывать видео на телефоне сразу в формате mp2t при помощи MediaRecorder, но, насколько я понял, этот формат поддерживается только с API 26. ffmpeg решили пока не затягивать, попробовать обойтись просто Android sdk.  По поводу RTCP - серверные ребята сказали, что они бы не хотели с ним заморачиваться.  Поэтому мы решили попробовать записывать коротенькие видео (секунд по 10) и отправлять их на сервер, потом их склеивать и отправлять клиентам. Опять же, метод, который позволяет на лету поменять файл, куда записывает MediaRecorder, появился только в API 26. Пытались использовали два MediaRecorder и менять их поочередно. Но так появилась задержка между кусочками. Сейчас вот пытаемся уменьшить задержку. Появилась идея брать поток байтов с превью камеры (из callback-а Camera.PreviewCallback), прогонять через MediaCodec, записывать в файл и отправлять на сервер. Пока у меня что-то не получается разобраться, как правильно, собственно, прогнать поток байтов =/  Собственно, мои вопросы к знатокам: - Подскажите, в правильную сторону ли я двигаюсь, или это "какая-то дичь"?  - Будет ли задача проще, если пробовать стримить видео по RTCP? Я видел библиотеку libstreaming, кто-нибудь пользовался?  - Может кто-нибудь знает, как вообще правильно решать подобную задачу?..  Заранее спасибо за ответы! Буду рад любым советам. 
Anna
Всем привет!  Снова прошу консультации у сообщества) Задача - написать простенький прототип для стриминга видео с телефона на сервер.  Поскольку хотелось обойтись без больших временный затрат, мы сначала нашли модуль для nginx, который позволяет стримить видео в HLS формате (https://github.com/arut/nginx-ts-module). Попробовали записывать видео на телефоне сразу в формате mp2t при помощи MediaRecorder, но, насколько я понял, этот формат поддерживается только с API 26. ffmpeg решили пока не затягивать, попробовать обойтись просто Android sdk.  По поводу RTCP - серверные ребята сказали, что они бы не хотели с ним заморачиваться.  Поэтому мы решили попробовать записывать коротенькие видео (секунд по 10) и отправлять их на сервер, потом их склеивать и отправлять клиентам. Опять же, метод, который позволяет на лету поменять файл, куда записывает MediaRecorder, появился только в API 26. Пытались использовали два MediaRecorder и менять их поочередно. Но так появилась задержка между кусочками. Сейчас вот пытаемся уменьшить задержку. Появилась идея брать поток байтов с превью камеры (из callback-а Camera.PreviewCallback), прогонять через MediaCodec, записывать в файл и отправлять на сервер. Пока у меня что-то не получается разобраться, как правильно, собственно, прогнать поток байтов =/  Собственно, мои вопросы к знатокам: - Подскажите, в правильную сторону ли я двигаюсь, или это "какая-то дичь"?  - Будет ли задача проще, если пробовать стримить видео по RTCP? Я видел библиотеку libstreaming, кто-нибудь пользовался?  - Может кто-нибудь знает, как вообще правильно решать подобную задачу?..  Заранее спасибо за ответы! Буду рад любым советам. 
когда нам нужно было стримить (но у нас были свои специфические задачи), мы делали набор картинок + аудио, запаковывали кусочками в пакеты и отправляли по UDP с HTTP header. в хедере был номер пакета. сервер получал пакеты и сортировал их и отдавал обратно на клиент. на клиенте распаковывали и склеивали. в итоге получилось норм, но работы там много, чтобы сделать нормально. если бы вернуть время назад, взяли бы wowza и не мучались.. скоро будем делать стрим опять. собираемся делать с kurento, webrtc streaming
Anna
это неудобно делать регулярками, проще самостоятельно пробежать по строке в поисках нужных символов
а как лучше написать условие через ()||() или через последовательный if else return false?
Anna
public static boolean isValidPassword(String password) { if (password == null) { return false; } else if (TextUtils.isEmpty(password)) { return false; } else if (password.trim().length() < 8){ return false; } return true; }
Pavel
ffmpeg например
Хм. Спасибо за наводку. А по поводу текущего решения что-нибудь можете рассказать?
Anna
Хм. Спасибо за наводку. А по поводу текущего решения что-нибудь можете рассказать?
c ффмпег был баг что на новых версиях андроида он писал видео только в 320х240, при норvальном разрешении были или баги или фпс очень сильно проседал. возможно уже поправили
Anna
На новых - это на каких, например?
мы все на стандарте делали. картинки брали с камеры через апи камеры... как сжимали не помню аудио тоже через стандарт, получался wav и мы его сжимали тоже через какую-то функцию, она в два раза сжимала. можно было брать либу чтобы сжимать в mp3, но тогда на него еще нужна была лицензия. теперь взяли бы mp3
Pavel
с 6, по-моему
Спасибо!
Dårk
Единственное, что там можно сделать — throw new RuntimeException(e) 😀
это философия андроида? я только на первых шагах пути, ещё не в курсе)
Mike
это философия андроида? я только на первых шагах пути, ещё не в курсе)
Не могу сказать, есть ли у него какая-то философия. В данной ситуации сложно как-то восстановиться, когда твоя база данных поломана.
Mike
в книжке учили хотя бы показать Toast
Какой толк от тоста? Нужно либо скрешиться, либо отослать стек трейс в Crashlytics, например
Igor
мы шлём non-fatals в Crashlytics и показываем сообщение пользователю
Rustam
Добрый день. Может кто нибудь знает https://stackoverflow.com/questions/49794035/android-webview-javascriptinterface-doesnt-have-methods ?
Vitalii
@RustamIbragimov onSendRequest должен быть public
Vitalii
@RustamIbragimov и попробуй передать параметры window.JsInterface.onSendRequest("url", "request", "response")