Рисование на холсте отдельной нитью Android

Привет, я пытаюсь использовать SurfaceView и Threads, чтобы быстрее рисовать на Canvas. До сих пор я рисовал на холсте, просто расширяя класс View и рисуя в методе onDraw. Кроме того, у меня есть возможность перерисовать холст, если пользователь вводит данные с клавиатуры (путем передачи кода клавиши из действия в пользовательское представление).

Проблема в том, что я застрял в многопоточности, я заменил класс View на SurfaceView и реализовал Runnable (после этот учебник). Но я не могу передать ключевой код, если ключевой ввод произошел. Кроме того, если я вызову метод invalidate() в пользовательском представлении, ничего не произойдет. Единственное отличие от обучающего кода и моего заключается в том, что я добавил в конец цикла while эту строку:

retry = false;

Чтобы остановить выполнение потока после рисунков. И добавил после каждого клика в действии эту строку, чтобы я мог перерисовать все заново.

view.resume();

Проблемы: -view не аннулирует ключевые события и не рисует новые изображения (не знаю почему)

  • если я остановлю поток, вызвав thread.join(); метод, другие объекты внутри CustomView останутся в куче памяти или будут уничтожены?

  • как заставить это приложение выполняться автоматически при запуске, а затем выполняться только при нажатии?

  • почему метод недействительности не очищает холст, если я явно вызываю перед view.resume()?

p.s. Мне нужно опубликовать образцы кода, пожалуйста, дайте мне знать, и я прикреплю репозиторий git с тестовым приложением.

Спасибо


person svarog    schedule 15.09.2017    source источник


Ответы (1)


В Android у вас есть класс Handler, который вы можете реализовать для отправки сообщений, вы создаете его внутри потока, который хотите получить, и реализуете handleMessage, в других потоках вы используете sendMessage.

Другое дело, что для логических флагов и многопоточности вы должны использовать ключевое слово volatile для некоторых оптимизаций VM.

volatile boolean retry = false;
person Marcos Vasconcelos    schedule 15.09.2017
comment
Я добавил ключевое слово volatile, но ничего не изменилось. Благодарность - person svarog; 18.09.2017