Метод onDraw может вызываться несколько раз при отрисовке представления по разным причинам, например:
- Бесконечный цикл из вызовов setWidth() и setHeight(). 2 Они внутренне вызывают метод invalidate(), который затем снова вызывает onDraw() для продолжения цикла. 2 Чтобы избежать этого, вызовы следует переместить за пределы реализации onDraw. 2
- Рекурсивный вызов метода invalidate(). 4 Например, если по завершению метода onCreate() вызывается несколько раз invalidate(), а потом входит в бесконечный цикл вызов onDraw метода. 4
Также несколько раз метод onDraw может вызываться, если при отрисовке представления каждый раз создаются ненужные объекты. 1 Чтобы избежать этого, соответствующую часть кода следует вынести за пределы метода onDraw. 1