Я могу только там где есть контекст (Активити, Фрагмент). Если Я хочу это делать из ВМ, то мне надо туда пробрасывать контекст и делать AndroidVM. А если Я хочу это делать из репозитория? Мне и туда как-то пробрасывать контекст? Могу ли Я без каких-то проблем с точки зрения андроида и проблем с точки зрения "чистой архитектуры" просто при старте приложения в активити создать свою папку, и сохранить ее путь в какой-то объект-утилиту?
Во VM в целом не так страшно. Хотя можно и без этого обойтись насколько я помню
А в репозитории? И буду рад ,если сможете ответить на другие вопросы..
В репозитории контекст не должен быть. Он работает с бд и сетью, а не с памятью устройства
В репозитории так себе идея хранить контекст, Потому что это уровень логики приложения и там хранятся логики и взаимодействия, Но твой вопрос вообще интересный, надо покумекать, потому что сохранение файла я разумеется делал, но довольно давно и не помню уже какая реализация была, стукни мне в личку я посмотрю в течение дня и постараюсь тебе скинуть Там я просто помню, что были какие-то подводные камни, но хоть убей не помню какие уже
А если Я хочу из сети сохранить в память телефона?
Разделяй уровни ответственности. Например, один уровень ходит в сеть и что-то возвращает, а другой эти данные умеет записывать. Не вали всё в одну кучу.
Этим занимается отдельный класс
Сори что влезаю, а почему бы не сделать некую обертку, по типу как ResourceProvider, тока назвать допустим FileManager и его иплементация будет содержать контекст и сохранять фото/файл и тд?
Во точно) так и сделано у меня было )
То есть по факту, создать какой-то синглтон, в котором у меня будет работа с фотками, и в котором будет контекст?
Да
У тебя di настроен в проекте?
Да , Коин
Не синглтон точно. инжектится там где нужно каждый раз новый инстанс Хотя если applicationContext, то можно и singleton Смотри главное, чтоб активити контекст или ui context не утек в синглтон (Поэтому собственно и опасно контекст использовать вне фрагментов и активти)
А, коин, там скоупы есть вообще ?
Да, но контекста нет
Я видел часто в проектах, что делают AndroidModule в дагере и провайдят контекст. Но эта ведь та же утечка, если помечают какой то AppScope анотацией?
Нет, если у тебя applicationContext, он ведь живет пока живет приложение
Так утечка может быть разве вне жизни приложения?)
Нет
Application Context It is an instance that is the singleton and can be accessed in activity via getApplicationContext(). This context is tied to the lifecycle of an application. Не может быть
Нет, говорю в общем, если хранить просто ссылку на контекст в репозитории
Но лучше, если доменная логика не знает ничего или знает по минимум об андроид классах, как-то раз был у меня случай, когда приходилось поддерживать одновременно андроид + десктоп на jvm и там в domain не было никаких андроид классов вообще
А куда его инжектят? В вм? Вм как бы в презентейшн слое находится, но не помню чтобы она знала о UI или лайфсайкл компонентах
В вм инжектить контекст нет смысла, есть AndroidViewModel
А контекст он откуда берет? Из приложения?
Аппликейшнконтекст?
В каком смысле?
Сам application имел ввиду
Делается синглтон и туда инжектится appContext. А в vm можно использовать этот класс. Это не будет считаться ui компонентом
Верно, но такое себе плодить двадцать синглтонов не?
Такое себе конечно, но если знаешь меру, то нет. Да и можно сделать не синглтон, если общий стейт не нужен, главное чтобы этот класс инкапсулировал работу с памятью и файлами
Обсуждают сегодня