Здесь нет бесконечного цикла.То, что происходит, - это то, что ОС перерисовывает вашу деятельность как можно быстрее.Когда ваша деятельность перерисовывается, она перерисовывает все дочерние представления.Поскольку в вашем коде очень мало вычислений, из того, что я вижу здесь, он работает очень быстро и, вероятно, перерисовывается со скоростью> 30 FPS.Ваше сообщение журнала делает это, как будто существует бесконечный цикл, когда его нет.На самом деле в вашем методе onDraw
даже нет цикла.
Чтобы проиллюстрировать, что происходит, попробуйте это.Добавьте защищенного члена drawCount
в свой класс Balls
и установите для него значение 0:
protect int drawCount = 0;
Затем добавьте drawCount
в конец вашего onDraw
сообщения журнала
public void onDraw(Canvas canvas){
drawCount++;
Log.w(this.getClass().getName(),"onDraw of Balls called. Total draws:" + Integer.toString(drawCount));
...
}
То, что вы должны увидеть, это то, что каждое сообщение журнала будет отображать различный drawCount.
Если вы хотите получить фантазию и рассчитать частоту кадров своего приложения, вы можете измерить время с момента первого розыгрыша, а затем разделить drawCount
на сколько времени прошло, что даст вам оценку вашей деятельностифреймрейт.