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

И снова я с необычным вопросом. Суть в чём: кто

может рассказать или дать ссылку на материал, где можно прочитать про то как более грамотно, с точки зрения архитектуры, ввернуть работу с NDK, если она требует взаимодействия с Activity?

31 ответов

4 просмотра

Вы всегда можете пробрасывать колбек внутрь jni

A A-F O X Автор вопроса
Michael Orlov
Вы всегда можете пробрасывать колбек внутрь jni

О'кей, но а кто будет запускать поток для NDK библиотеки? Откуда мне всё это делать? Из под Activity — бред, из под ViewModel — костыль?

A A-F O X Автор вопроса
Michael Orlov
Поток чего? Опишите что за сценарий

Поток в котором находится NDK, нет? Попробую описать сценарий, начав с описания сути приложения: моё приложение это обёртка над движком для text-based историй со своим псевдояпом и вводом посредством выбора действий из списка т.е. menu-based. Поэтому, если кратко, то суть это воспроизведение историй, написанных на псевдояпе. Соответственно, сценарий работы, если вы про это, следующий: запускаем поток для библиотеки => передаём ей файл с историей => отображаем то, что выдаёт в ответ библиотека => ожидаем действия пользователя => пользователь нажал на какое-то действие => обращаемся к библиотеке, передавая ей индекс элемента списка => отображаем то, что "выдает" библиотека => ожидаем действия пользователя => <...>

A A-F O X Автор вопроса
Leonid B.
NDK находится в потоке? 🤯

Ну обращение к ней идёт из отдельного потока, да, а что в этом такого?

A A F O X
Ну обращение к ней идёт из отдельного потока, да, ...

Ничего такого. Из какого потока вызовешь, в том и будет.

A A F O X
О'кей, но а кто будет запускать поток для NDK библ...

Ну если взаимодействие с активити, то активити

A A-F O X Автор вопроса

Да, библиотека довольно сильно зависит от представления и вот это я хочу каким-то способом обойти чтобы сделать свой проект "чистым", и понятным.

A A F O X
Да, библиотека довольно сильно зависит от представ...

Ну так сходу не скажешь А чем принципиально отличается использование ndk от обычного использования классов в плане влияния на арзитектуру? Обычно делаешь фасад/обертку для работы с ндк ну и дальше проектируешь так же как и обычные жава классы

A A-F O X Автор вопроса

Например тем, что из-за взаимодействия с активити, с представлением ей нужен отдельный поток т.к. она не может работать в основном потоке. И цеплять её в контекст активити я не хочу просто из-за того, что в таком случае если Андроид захочет убить моё приложение, то он грохнет и поток с библиотекой, что очень неприятно для пользователя. Ну а цеплять в контекст ViewModel можно, но из-за этого выходит шизофазия уровня "getMainActivity()" за что на меня уже точат вилы адепты чистой архитектуры, например

A A F O X
Например тем, что из-за взаимодействия с активити,...

Всё равно непонятно, в чём проблема. Точно так же будут "грохнуты" и все остальные "обычные" библиотеки.

A A F O X
Например тем, что из-за взаимодействия с активити,...

всмысле убить приложение? а вьюмодель это как решит?

A A-F O X Автор вопроса
ℕo ℕame
всмысле убить приложение? а вьюмодель это как реши...

Она сохраняет данные при повороте экрана, например

A A-F O X Автор вопроса
Leonid B.
Всё равно непонятно, в чём проблема. Точно так же ...

Да, но ViewModel "сохраняет" контроль над потоком библиотеки при пересоздании Activity. Проблема в том, что я хочу повысить читабельность кода и общее соответствие какому-нибудь архитектурному шаблону т.е. сильнее абстрагировать работу с библиотекой — отделить её от ViewModel/Activity, а так же реализовать гарантию восстановления состояния в случае если приложение замочил Android

A A F O X
Да, но ViewModel "сохраняет" контроль над потоком ...

а что значит сохраняет контроль? ссылку хранит или че?

A A F O X
Да, но ViewModel "сохраняет" контроль над потоком ...

Чем это отличается от вызова в потоке любого метода из любого jar/aar?

A A-F O X Автор вопроса
ℕo ℕame
а что значит сохраняет контроль? ссылку хранит или...

Ну т.е. если я размещаю код для работы с библиотекой в Activity, то при пересоздании Activity, как я понимаю, пересоздаётся и поток, однако если я размещаю код для работы с библиотекой в ViewModel, пусть и с такими жуткими костылями, то при пересоздании Activity поток не пересоздаётся.

A A F O X
Ну т.е. если я размещаю код для работы с библиоте...

Вы неверно понимаете - никакой поток Активити не пересоздается

A A-F O X Автор вопроса
Michael Orlov
Вы неверно понимаете - никакой поток Активити не п...

То есть если я запущу в Activity новый поток и пересоздам это Activity, то я просто потеряю ссылку на созданный поток? Так верно?

A A F O X
То есть если я запущу в Activity новый поток и пер...

Если вы не сохраните нигде ссылку на этот поток, то да

A A-F O X Автор вопроса

Ага, значит, я не прав и ViewModel просто сохраняет ссылку на поток, но с точки зрения архитектуры правильно ли хранить ссылку на поток в ViewModel?

A A F O X
Ага, значит, я не прав и ViewModel просто сохраняе...

Какую задачу решаешь? Вижу изобретение велосипеда я

A A F O X
Ага, значит, я не прав и ViewModel просто сохраняе...

Скорее - не то, что это правильно, а то, что других вариантов нет.

A A F O X
Ага, значит, я не прав и ViewModel просто сохраняе...

Вы думаете о чистой архитектуре - это похвально, но у вас архитектура диктуется вашим устройством библиотеки

A A-F O X Автор вопроса
Michael Orlov
Вы думаете о чистой архитектуре - это похвально, н...

Которая сильно привязана к представлению, да. Поэтому я и хочу найти некий баланс чтобы меня не сожгли на костре за костыли и хранение ссылок на поток/запуск потока в ViewModel, и чтобы это стабильно работало

A A-F O X Автор вопроса
Leonid B.
У вас библиотека ndk работает с view?

Ну не напрямую, но ей да, от View нужен, например, индекс нажатого элемента из списка действий.

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

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

Anyone here suffers from unexplained aural migraines, who would be up for talking for a bit? Doesn't *have* to be aural, but I am not asking about headaches, I mean actual mi...
Martin Rys
55
Всем вечера. Подскажите как лучше сделать. делаю на Д10 Например будет база данных на SQLite. в ней будет много таблиц. более 50шт Типа справочник. Содержать ID Name Id p...
Андрей Т 🐎
10
подскажите пожалуйста, как мне освободить результат записанный в переменную result? в чем проблема подскажите если МОЖЕТЕ?
Михаил Helper
28
Добрый день! Хочу спросить совета. Хочется в скрипт добавить некую конструкцию, что скрипт создал файл, который нужно потом скопировать в определенное место. Нашел такой сп...
Mikhail
4
Вопрос по WIN32: Насколько я понимаю то все функции win32 привязаны к объектам операционной системы. Например консоль, файл, кисть, окна итд. Следовательно функции win32 упра...
Tommy Vercetti
6
in telegram can i have multiple username? so instead of having multiple account for example one for work, one for friend and one for family with three diff numbers. using one ...
Mr Thieves
6
кто-то пользуется компонентами rx ? как их лучше ставить, через OPM? (lazarus)
Iluha Companets
15
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
Hello, can I install macOS and run flutter on a virtual machine? Is it possible to print for iphone?
Mazones
11
есть тут кто-то , кто только начал изучать си? если проходите курс на степике или как-то сами изучаете, пишите, может, скооперируемся?..
Eule
25
Карта сайта