может рассказать или дать ссылку на материал, где можно прочитать про то как более грамотно, с точки зрения архитектуры, ввернуть работу с NDK, если она требует взаимодействия с Activity?
Вы всегда можете пробрасывать колбек внутрь jni
О'кей, но а кто будет запускать поток для NDK библиотеки? Откуда мне всё это делать? Из под Activity — бред, из под ViewModel — костыль?
Поток чего? Опишите что за сценарий
Поток в котором находится NDK, нет? Попробую описать сценарий, начав с описания сути приложения: моё приложение это обёртка над движком для text-based историй со своим псевдояпом и вводом посредством выбора действий из списка т.е. menu-based. Поэтому, если кратко, то суть это воспроизведение историй, написанных на псевдояпе. Соответственно, сценарий работы, если вы про это, следующий: запускаем поток для библиотеки => передаём ей файл с историей => отображаем то, что выдаёт в ответ библиотека => ожидаем действия пользователя => пользователь нажал на какое-то действие => обращаемся к библиотеке, передавая ей индекс элемента списка => отображаем то, что "выдает" библиотека => ожидаем действия пользователя => <...>
NDK находится в потоке? 🤯
Ну обращение к ней идёт из отдельного потока, да, а что в этом такого?
Ничего такого. Из какого потока вызовешь, в том и будет.
Ну если взаимодействие с активити, то активити
Да, библиотека довольно сильно зависит от представления и вот это я хочу каким-то способом обойти чтобы сделать свой проект "чистым", и понятным.
Ну так сходу не скажешь А чем принципиально отличается использование ndk от обычного использования классов в плане влияния на арзитектуру? Обычно делаешь фасад/обертку для работы с ндк ну и дальше проектируешь так же как и обычные жава классы
Например тем, что из-за взаимодействия с активити, с представлением ей нужен отдельный поток т.к. она не может работать в основном потоке. И цеплять её в контекст активити я не хочу просто из-за того, что в таком случае если Андроид захочет убить моё приложение, то он грохнет и поток с библиотекой, что очень неприятно для пользователя. Ну а цеплять в контекст ViewModel можно, но из-за этого выходит шизофазия уровня "getMainActivity()" за что на меня уже точат вилы адепты чистой архитектуры, например
Всё равно непонятно, в чём проблема. Точно так же будут "грохнуты" и все остальные "обычные" библиотеки.
всмысле убить приложение? а вьюмодель это как решит?
Она сохраняет данные при повороте экрана, например
Да, но ViewModel "сохраняет" контроль над потоком библиотеки при пересоздании Activity. Проблема в том, что я хочу повысить читабельность кода и общее соответствие какому-нибудь архитектурному шаблону т.е. сильнее абстрагировать работу с библиотекой — отделить её от ViewModel/Activity, а так же реализовать гарантию восстановления состояния в случае если приложение замочил Android
а что значит сохраняет контроль? ссылку хранит или че?
Чем это отличается от вызова в потоке любого метода из любого jar/aar?
Ну т.е. если я размещаю код для работы с библиотекой в Activity, то при пересоздании Activity, как я понимаю, пересоздаётся и поток, однако если я размещаю код для работы с библиотекой в ViewModel, пусть и с такими жуткими костылями, то при пересоздании Activity поток не пересоздаётся.
Вы неверно понимаете - никакой поток Активити не пересоздается
а что значит пересоздается поток?
А главное - какой именно?
То есть если я запущу в Activity новый поток и пересоздам это Activity, то я просто потеряю ссылку на созданный поток? Так верно?
Если вы не сохраните нигде ссылку на этот поток, то да
Ага, значит, я не прав и ViewModel просто сохраняет ссылку на поток, но с точки зрения архитектуры правильно ли хранить ссылку на поток в ViewModel?
Какую задачу решаешь? Вижу изобретение велосипеда я
Скорее - не то, что это правильно, а то, что других вариантов нет.
Вы думаете о чистой архитектуре - это похвально, но у вас архитектура диктуется вашим устройством библиотеки
Которая сильно привязана к представлению, да. Поэтому я и хочу найти некий баланс чтобы меня не сожгли на костре за костыли и хранение ссылок на поток/запуск потока в ViewModel, и чтобы это стабильно работало
звучит как хуйня
У вас библиотека ndk работает с view?
Ну не напрямую, но ей да, от View нужен, например, индекс нажатого элемента из списка действий.
Обсуждают сегодня