без DI.
всё что было испробовано прекрасно работает из приложения, но как только его начинают асинхронно использовать workmanager или service то обнаруживается второй инстанс.
Все варианты с Object не предлагать, потому что вот : https://m.habr.com/ru/post/425077/
варианты с ленивой инициализацией ведут себя стабильнее но на API 29+ есть такая же проблема дублирования.
вот такие вещи более менее стабильны:
companion object {
lateinit var instance: Single
@Synchronized
fun get (): Single {
return instance
}
}
но тоже иногда сбоят когда инициализируются из разных потоков.
Зачем мне этот синглтон? - для синхронизации акцесса и рефреша в ретрофите для разных потоков когда и сервис и воркменеджер и апп ходят в сеть асинхронно и надо както это дело упорядочить
Кто сталкивался с проблемой? Есть что сказать?
https://gist.github.com/Razeeman/0310c2d455c76712eb451bca2c533ac8#kotlin-example
а почему без di?
В вашем случае вы вряд ли будете пользоваться двум класслоадерами. Так зачем тогда отказываться от object?
это ловит второй инстанс при параллельном обращении воркменеджера или сервиса
в проекте нет di. ну и честно я его не очень умею. если DI то нужен какойто примитивно лёгкий путь)
toothpick - максимально легкий путь
как так? дубль чек же
вот именно в этом и проблема. есть синглтон с ретрофитом. в нём подвязан autenticator. его юзают и сервис и воркменеджер и апп... при смене ключиков надо чтобы все получили доступ к последнему ключу. а так как непонятно кто вызывал это и откуда нередко наблюдается два инстанса
Автор не осилил написать object Singleton?
🤷🏼♂️
ну я тут уже двум группам сломал моск примерами и логами) могу ещё сюда покидать это чудо. не смотря на даблчек попробуйте декомпилировать это в джава. это совсем не тоже самое что синглтон на java
А есть минимально воспроизводимый пример кода?
автор асилил сразу написать в вопросе почему это непотребно со ссылкой на источник
Я про автора сего непотребства, а не вопроса
сейчас я уже спать. но думаю завтра смогу асилить примерчик да там всё просто: любой вариант синглтона с полем стринг например из аппа сет и гет из воркманагера сет и гет и о чудо, вылетит птичка - какоето старое значение не синхронизированное
а) да я уже сплю прост)
если прологировать инстанс, то высянится что их нсколько
Я просто слабо верю, что гонка, даже если она там есть, стабильно воспроизводится.
Мультипроцессное приложение?
у меня сейчас в тесте тут так: приходит новый ключик. его запихиваю в БД. на базе висит FLOW во все потоки приходит очень корректно дальше я в collect записываю значение в локальную переменную а вот гет из неё подводит иногда. да на тест уходит минут 5-10 иногда... но если хорошо искуственно продолбить новыми flow то воспроизовдится
Знаешь, что тов. Торвальдс говорит в таких ситуациях?)
Не могу понять, что мешало прям здесь ответить «да».
глобальный недосып) сорри)
Обсуждают сегодня