Yergali
А зачем ты все создаёшь в вызове?
а как надо было создать?
R
а как надо было создать?
Ну смотри у тебя TrackGPS будет этих экземпляров столько сколько отработает onStartCommand.. я особо не вник но выглядит как утечка
R
а как надо было создать?
Попробуй rx использовать, тебе будет проще формировать потоки данных
Yergali
ок
R
какой Schedulers лучше использовать?
В зависимости от заполненности, если там много крутиться будет, те много таких отложенных задач, посмотри сколько ядер на машине и сделай пул в размер этого числа.. вообще очень интересный вопрос, если лень читать про многопоточность то на io запусти и продолжай быть программистом
Владислав
использую в приложении android.hardware.ConsumerIrManager; можно как то отсеить девайсы до установки приложения из маркета, которые не имеют на борту ИК бластера
Микола
https://developer.android.com/guide/topics/manifest/uses-feature-element
Владислав
Vadim
Клиент хочет чтобы при нажатии кнопки like, сердечко вылетало с рандомных сторон экрана и притягивалось в место клика… Может кто-нибудь встречал похожую библиотеку?
Mike
да, когда?
А зачем? Ты хочешь написать библиотеку, которая работает с моей библиотекой?)
Сергій
А зачем? Ты хочешь написать библиотеку, которая работает с моей библиотекой?)
Нет, просто не хочется тянуть в проект что-то с индексом 0.0.х (
Сергій
А вообще мой коллега заценил, правда все равно сказал что не заменит data binding
Сергій
Почему не заменит?
Ему набор фич датабайндинга решает
Сергій
А что там?)
+/- тоже самое, observable fields тоже есть
Сергій
Могу в личку скинуть контакт, узнаешь его мнение, он давно использует data binding.
Himars
Vitaly
Почему в этом коде при блокировании потока блокируется вообще всё и запуск сервиса, который я даже в отдельный поток вынес, не запускается?
Vitaly
Future future = service.submit(() -> { synchronized (lock) { if (getNicknameById(uuid) == null) { new Thread(() -> new ServerPostman().postRequest(new AddressRequest(uuid))).start(); lock.wait(); } MessageDao messageDao = App.getInstance().getDatabase().messageDao(); messageDao.insert(message); return null; } });
Vitaly
Здесь асинхронщина, поэтому последовательно не получится, а корутины не хочу пока что юзать
Vitaly
Блин, даже так не катит, я думал, что просто не из главного потока вызываю
Vitaly
Но как мне указать, что мне нужно ждать ответ с сервера?
Vitaly
Блокировка потока всегда должна осуществляться в synchronized блоке, это просто безопаснее
Vitaly
Вот так изменил код
Vitaly
public void insertMessage(Message message){ String uuid = message.addressId; if (getNicknameById(uuid) == null) new ServerPostman().postRequest(new AddressRequest(uuid)); Future future = service.submit(() -> { if(getNicknameById(uuid) == null) synchronized (lock) { lock.wait(); } MessageDao messageDao = App.getInstance().getDatabase().messageDao(); messageDao.insert(message); return null; }); try { future.get(); App.getInstance().getResponseListeners().getContactUpgradeBus().onUpdateLastMessage(message.addressId, message.text); } catch (InterruptedException | ExecutionException e) { e.printStackTrace(); } }
Vitaly
А как тогда ждать ответ с сервера?
Mike
А можно линк?
https://github.com/Miha-x64/reactive-properties/
Vitaly
Хорошо) Уберу я wait, тогда вот что будет: у меня далее идёт добавление сообщения в БД, а без wait сообщение добавится без адресанта (он запрашивается у сервера) и будет исключение
Григорий
Экземпляр интерфейса, всё нормально
Я просто другу который уже senior Java сказал "экземпляр интерфейса" и он не понял о чем я
Григорий
Вот и решил узнать, может я как-то не так это называю
Григорий
А вы как обычно называете переменную с типом интерфейса?
Kanstantsin
а как назвать её ?
Kanstantsin
экземпляр интерфейса ты же создать не сможешь
Vitaly
скорее екземпляр реализации
Думаю это правильно
Kanstantsin
очевидно что нужно сделать класс имплементящий, и получается переменная это экземляр реализации
Григорий
Ну если кому-то комментировать свои действия, то при создании переменной типа интерфейс ее разные никак нельзя официально назвать?
Ontoshgo
но если честно, это просто доебки
Ontoshgo
как говно не назови - пахнуть цветами оно не станет
Pavlo
Это экземпляр анонимного класа. Компилятор генерирует клас с каким-то дефолтным названием, которое тебе не нужно
Григорий
Просто мы с другом учимся программировать и я то что сам уже понял ему объясняю. И вот тут не знаю как назвать
Vitaly
Да что за магия опять творится) Если я запускаю сервис, а только потом блокирую поток, он должен запуститься, верно? Или тут всё-таки есть акие-то подводные камни?
Picty
Ребята, подскажите что лучше посмотреть по теме тестов при связке: Moxy + Dagger2
Picty
Юнит или интеграционные?
Unit (Espresso например)
Vitaly
Ребята, подскажите что лучше посмотреть по теме тестов при связке: Moxy + Dagger2
Я лично сам разбирался, ничего адекватного не смог найти
Vladimir
я это называю полем или аргументом такого-то типа
Vitaly
Unit (Espresso например)
Espresso тестирует ui, что входит в интеграционные тесты, а юнит тестирует только логику, в MVP - это Presenter
Picty
Espresso тестирует ui, что входит в интеграционные тесты, а юнит тестирует только логику, в MVP - это Presenter
Согласен, для unit идет Mockito(как вариант) Спасибо за ответ — буду ковырять.
Vadim
так и не понял как можно упросить данное выражение с помощью String.format: val message = if (isMerchant) "[Merchant Report]" + notes + (if (database != null) databaseKey else "") else notes + (if (database != null) databaseKey else "")
Vadim
Что-то как-то кошмар. Но по сути от isMerchant зависит только наличие "тэга" в начале строки
ну да, просто добавляется тэг но хотелось бы упростить данное выражение
Unat
ну да, просто добавляется тэг но хотелось бы упростить данное выражение
val messageFixed = "${if (isMerchant) "[Merchant Report]" else ""}$notes${if (database != null) databaseKey else ""}"
Unat
вот так, например
Unat
val messageFixed = "${"[Merchant Report]".takeIf { isMerchant }.orEmpty()}$notes${databaseKey.takeIf { database != null }.orEmpty()}" или даже так...
Unat
можно долго изголяться
Unat
но я-бы растащил эту кашу на переменные
Vladimir
val message1 = "${when (isMerchant) { true -> "[Merchant Report]" else -> "" }} $notes ${database?:databaseKey}"
Unat
Вот-вот
Unat
С database?:databaseKey, кажется, ошибка
Vladimir
тупанул
Unat
А то слишком красиво получалось :)
Vadim
А то слишком красиво получалось :)
значит ваш вариант подходит более))
Vitaly
Как можно через Future с помощью ExecutorService получить результат от сервера?
FromSi
методом get()? @javastart
Геноцид очевидных вопросов?)