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

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

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

31 ответов

12 просмотров

Вы всегда можете пробрасывать колбек внутрь 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 нужен, например, индекс нажатого элемента из списка действий.

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
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
Карта сайта