Вопрос новичка по графике Android Studio. Как работает canvas?

биржа трафика для сайта

Ребятки, помогите, пожалуйста, новичку по Android

Уффф, прямо не знаю с чего начать, самый первый вопрос, надеюсь поможете(
Дело вот в чём: мне необходимо написать игру, суть игры думаю, что не важна, проблема в отображении графики. У меня есть метод protected void onDraw(Canvas canvas). В нём идёт начальное отображение уровня на канве. в нём срабатывает вызов Timer.
Timer t = new Timer(player,canvas); //player объект моего игрока где координаты и свой paint
Запускаем таймер t.start();
Потом таймер с интервалом в секунду вызывает метод update(player,canvas) он отдаёт туда тот же объект Canvas и и тот же объект игрока. Но в нём и потом появляется ошибка, точнее просто вылет приложения
Вот update(c,p);

Код
protected void update (Player player,Canvas canvas){
player.setX1(player.getX1() + Vx);
player.setY1(player.getY1() + Vy);
Log.d("MyTag",String.valueOf(player.getX1()));
Log.d("MyTag",String.valueOf(player.getY1()));
try {if (canvas != null){
canvas.drawCircle(player.getX1(), player.getY1(), player.getRadius(), player.getPaint());} //на этой строке происходит вылет. Canvas не NULL. По идее можно рисовать
}
catch (Exception e){Log.d("MyTag","NULL");}
}

Вот Timer

Код
public class Timer extends CountDownTimer {
int i;
public Player player;
public Canvas canvas;

public Timer(Player player, Canvas canvas) {
super(Integer.MAX_VALUE, 1000);
this.player=player;
this.canvas=canvas;

}

@Override
public void onTick(long millisUntilFinished) {
update(this.player,this.canvas);
i+=1;
Log.d("MyLog",Integer.toString(i));
}

@Override
public void onFinish() {

}

Ребята, пожалуйста, помогите. Все были новичками(