Я разрабатываю приложение под android, и уже в течении долгого времени не могу решить одну проблему, а именно:
У меня есть фрагмент, в котором surfaceview с потоком рисования для постоянной перерисовки. Само рисование работает отлично, но вот переключение между страницами - это целая проблема. Я пробовал кучу способов, дабы решить эту проблему. Executor использовал, пробовал возвращать return при переключении, ещё несколько способов и всё без толку.
Вот мой код создания surfaceview
@Override
public void surfaceCreated(SurfaceHolder holder) {
if (drawThread == null || drawThread.getState() == Thread.State.TERMINATED) {
drawThread = new DrawThread(getHolder(), getContext());
drawThread.setRunning(true);
executorThread.submit(drawThread);
}
if (!drawThread.isAlive())
drawThread.start();
Это мой последний вариант реализации создания потока рисования в surfaceview
В методе surfaceDestroyed() ничего нет на данный момент.
Вот поток рисования:
public void run() {
Canvas canvas;
while (mRunning) {
canvas = null;
try {
canvas = mSurfaceHolder.lockCanvas();
synchronized (mSurfaceHolder) {
drawGridLine(canvas);
drawGridText(canvas);
drawAxis(canvas);
if (!isOverMathCalc && !isZoom)
drawGraphics(canvas);
}
} catch (NullPointerException e) { /* */ }
finally {
if (canvas != null)
mSurfaceHolder.unlockCanvasAndPost(canvas);
}
}
}
Как мне сделать нормальное завершение потока рисования и потом очередной его запуск после того, как мы опять перешли на страницу рисования. Так как иначе при переключении фрагментов программа тормозит, переключение происходит при помощи NavigatorDrawer.
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники