Многие графические ресурсы явно освобождаются / освобождаются после их использования.Я не совсем уверен, почему они это делают, но по какой-то причине они не могут делать то, что вы пытаетесь.
Вместо того, чтобы рисовать вне метода onDraw, используйте какой-нибудь флаг дляизменить то, что делает метод onDraw.Когда вы хотите нарисовать какую-то конкретную вещь, вы можете установить правильный флаг и вызвать invalidate()
.
@Override
public void onDraw(Canvas canvas){
super.onDraw(canvas);
if (doThing) {
canvas.drawCircle(x, y, radius, p);
}
}
РЕДАКТИРОВАТЬ
Что-то еще, что нужно рассмотреть, это рисовать инецензурный источникЭто означает использование некоторого графического представления, такого как растровое изображение, в качестве буфера, который вы можете нарисовать в другом коде.Это не обновит ваш графический интерфейс, но даст вам возможность рисовать в тяжелых условиях без блокировки устройства пользователя.Как только вы закончите рисовать растровое изображение (или что-то еще), вы можете сделать ваш вид недействительным и нарисовать его на экране методом onDraw(Canvas)
.