Я портирую приложение, которое уже написано на C ++, для работы в Linux, которое теперь должно работать на устройстве Android. Это приложение с интенсивным использованием графических процессоров, которое выполняет вызовы OpenCL и выполняет ряд тестов. Это может занять несколько часов или дней, чтобы закончить работу.
У меня есть Java Activity, которая читает некоторые базовые данные, а затем передает их в JNI.
Он работает нормально для более коротких операций, но после нескольких секунд он остановится; Я могу снять его с паузы, и он продолжит работать, но затем он будет зависать примерно каждые сто или около того операций (что займет не более секунды).
Есть ли что-то, чего мне не хватает в знаниях Android, какая-то критическая ошибка, которую я упустил из виду, что может быть причиной этого? Будет ли более разумным переместить весь код в NativeActivity? Или мне просто нужно совершать обратные вызовы в Java, чтобы время от времени отображать что-то, чтобы ОС не закрывала меня?
Спасибо всем, у кого есть терпение ответить на мои вопросы
В Android строго соблюдается правило, при котором длительные операции с интенсивным использованием процессора не должны выполняться в потоке пользовательского интерфейса. Ни переключение на NativeActivity, ни обратные вызовы для отображения чего-либо не помогут, но если вы запускаете тесты в рабочем потоке, я мог бы посоветовать время от времени обновлять экран, чтобы пользователь мог отслеживать общий прогресс.
Других решений пока нет …