169 похожих чатов

Доброго времени суток! помогите пожалуйста с проблемой: нужен синглтон на котлине

без 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
}
}

но тоже иногда сбоят когда инициализируются из разных потоков.

Зачем мне этот синглтон? - для синхронизации акцесса и рефреша в ретрофите для разных потоков когда и сервис и воркменеджер и апп ходят в сеть асинхронно и надо както это дело упорядочить

Кто сталкивался с проблемой? Есть что сказать?

23 ответов

11 просмотров

https://gist.github.com/Razeeman/0310c2d455c76712eb451bca2c533ac8#kotlin-example

а почему без di?

В вашем случае вы вряд ли будете пользоваться двум класслоадерами. Так зачем тогда отказываться от object?

Dmitriy-Marchenko Автор вопроса

это ловит второй инстанс при параллельном обращении воркменеджера или сервиса

Dmitriy-Marchenko Автор вопроса

в проекте нет di. ну и честно я его не очень умею. если DI то нужен какойто примитивно лёгкий путь)

toothpick - максимально легкий путь

как так? дубль чек же

Dmitriy-Marchenko Автор вопроса

вот именно в этом и проблема. есть синглтон с ретрофитом. в нём подвязан autenticator. его юзают и сервис и воркменеджер и апп... при смене ключиков надо чтобы все получили доступ к последнему ключу. а так как непонятно кто вызывал это и откуда нередко наблюдается два инстанса

Автор не осилил написать object Singleton?

🤷🏼‍♂️

Dmitriy-Marchenko Автор вопроса

ну я тут уже двум группам сломал моск примерами и логами) могу ещё сюда покидать это чудо. не смотря на даблчек попробуйте декомпилировать это в джава. это совсем не тоже самое что синглтон на java

А есть минимально воспроизводимый пример кода?

Dmitriy-Marchenko Автор вопроса

автор асилил сразу написать в вопросе почему это непотребно со ссылкой на источник

Я про автора сего непотребства, а не вопроса

Dmitriy-Marchenko Автор вопроса

сейчас я уже спать. но думаю завтра смогу асилить примерчик да там всё просто: любой вариант синглтона с полем стринг например из аппа сет и гет из воркманагера сет и гет и о чудо, вылетит птичка - какоето старое значение не синхронизированное

Dmitriy-Marchenko Автор вопроса

а) да я уже сплю прост)

Dmitriy-Marchenko Автор вопроса

если прологировать инстанс, то высянится что их нсколько

Я просто слабо верю, что гонка, даже если она там есть, стабильно воспроизводится.

Мультипроцессное приложение?

Dmitriy-Marchenko Автор вопроса

у меня сейчас в тесте тут так: приходит новый ключик. его запихиваю в БД. на базе висит FLOW во все потоки приходит очень корректно дальше я в collect записываю значение в локальную переменную а вот гет из неё подводит иногда. да на тест уходит минут 5-10 иногда... но если хорошо искуственно продолбить новыми flow то воспроизовдится

Знаешь, что тов. Торвальдс говорит в таких ситуациях?)

Не могу понять, что мешало прям здесь ответить «да».

Dmitriy-Marchenko Автор вопроса

глобальный недосып) сорри)

Похожие вопросы

Обсуждают сегодня

Какой-то там пердун в 90-х решил, что есть какая-то разная типизация. Кого вообще это волнует?
КТ315
49
void terminal_scroll() { memmove(terminal_buffer, terminal_buffer + VGA_WIDTH, buffer_size - VGA_WIDTH); memset(terminal_buffer + buffer_size - VGA_WIDTH, 0, VGA_WIDTH); ...
Егор
47
Всем привет! Подскажите, пожалуйста, в чем ошибка? Настраиваю подключение к MySQL. Либы лежат рядом с exe. Все как по "учебнику"
Евгений
16
А можете как-то проверить меня по знаниям по ассемблеру?
A A
132
Здравствуйте! У меня появилась возможность купить книгу "Изучай Haskell во имя добра!". Но я где-то слышал, что эта книга устарела. Насколько это правда??
E
22
Здравствуйте! Я вот на stepic решаю задачи на хаскеле https://stepik.org/lesson/8443/step/8?unit=1578 мой код import Data.List (isInfixOf) removing :: String -> [String] ->...
E
10
Камрады, кто тесно работал с vtv, хотел уточнить. Ширина column задаётся жёстко на этапе создания дерева или можно в рантайме ее менять программно (не мышкой)?
Ed Doc
10
да ладно ... что там неочевидного ? глянуть в исх-ки датасета и/или кверика чтобы понять в каком месте и как выполняется обращения к св-вам blablaSQL - минутное дело, даже е...
Сергей
7
Здесь для arm кто-нибудь кодит ?
Nothing
52
Всем привет, у меня есть сервер принимающий входящие HTTP подключения, как проверить, что подключение было через прокси или нет, есть какие то поля в заголовках по которым мо...
Кибер Бомж
8
Карта сайта