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 ответов

12 просмотров

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 Автор вопроса

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

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

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

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
Карта сайта