Yergali
R
а как надо было создать?
Ну смотри у тебя TrackGPS будет этих экземпляров столько сколько отработает onStartCommand.. я особо не вник но выглядит как утечка
Yergali
ок
Yergali
R
какой Schedulers лучше использовать?
В зависимости от заполненности, если там много крутиться будет, те много таких отложенных задач, посмотри сколько ядер на машине и сделай пул в размер этого числа.. вообще очень интересный вопрос, если лень читать про многопоточность то на io запусти и продолжай быть программистом
Yergali
Сергій
Владислав
использую в приложении android.hardware.ConsumerIrManager; можно как то отсеить девайсы до установки приложения из маркета, которые не имеют на борту ИК бластера
Микола
https://developer.android.com/guide/topics/manifest/uses-feature-element
Vladimir
Владислав
Vadim
Клиент хочет чтобы при нажатии кнопки like, сердечко вылетало с рандомных сторон экрана и притягивалось в место клика… Может кто-нибудь встречал похожую библиотеку?
Mike
да, когда?
А зачем? Ты хочешь написать библиотеку, которая работает с моей библиотекой?)
Сергій
Сергій
А вообще мой коллега заценил, правда все равно сказал что не заменит data binding
Mike
Mike
Сергій
А что там?)
+/- тоже самое, 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
Mike
А можно линк?
https://github.com/Miha-x64/reactive-properties/
Vitaly
Хорошо) Уберу я wait, тогда вот что будет: у меня далее идёт добавление сообщения в БД, а без wait сообщение добавится без адресанта (он запрашивается у сервера) и будет исключение
Григорий
Вот и решил узнать, может я как-то не так это называю
Ontoshgo
Григорий
А вы как обычно называете переменную с типом интерфейса?
Kanstantsin
а как назвать её ?
Vitaly
Kanstantsin
экземпляр интерфейса ты же создать не сможешь
Vitaly
Kanstantsin
очевидно что нужно сделать класс имплементящий, и получается переменная это экземляр реализации
Григорий
Ну если кому-то комментировать свои действия, то при создании переменной типа интерфейс ее разные никак нельзя официально назвать?
Ontoshgo
но если честно, это просто доебки
Ontoshgo
как говно не назови - пахнуть цветами оно не станет
Pavlo
Это экземпляр анонимного класа. Компилятор генерирует клас с каким-то дефолтным названием, которое тебе не нужно
Григорий
Просто мы с другом учимся программировать и я то что сам уже понял ему объясняю. И вот тут не знаю как назвать
Григорий
Vitaly
Да что за магия опять творится) Если я запускаю сервис, а только потом блокирую поток, он должен запуститься, верно? Или тут всё-таки есть акие-то подводные камни?
Picty
Ребята, подскажите что лучше посмотреть по теме тестов при связке:
Moxy + Dagger2
Vitaly
Vitaly
Vladimir
я это называю полем или аргументом такого-то типа
Vitaly
Unit (Espresso например)
Espresso тестирует ui, что входит в интеграционные тесты, а юнит тестирует только логику, в MVP - это Presenter
Picty
Vadim
так и не понял как можно упросить данное выражение с помощью String.format:
val message = if (isMerchant) "[Merchant Report]" + notes + (if (database != null) databaseKey else "")
else notes + (if (database != null) databaseKey else "")
Unat
Vadim
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
Вот-вот
Vadim
Vadim
Unat
С database?:databaseKey, кажется, ошибка
Vladimir
Vladimir
Vladimir
тупанул
Unat
А то слишком красиво получалось :)
Тыныстан
Vitaly
Как можно через Future с помощью ExecutorService получить результат от сервера?
Mike