¿Cómo cancelar el temporizador y renovar el mismo temporizador?

Estoy creando una aplicación que vibra y emite un pitido cada 30 segundos, y cuando cierro la sesión, se deben cancelar y cuando se inicia sesión, se debe reanudar la vibración y el pitido.

NOTA: debe vibrar y sonar cada 30 segundos hasta que cierre la sesión

En mi aplicación estoy usandoTimerTask para esta implementación

Este es el código para vibrar y usar pitidos.TimerTask

static TimerTask Task;
final static Handler handler = new Handler();
static Timer t = new Timer();

public static void vib() {

    Task = new TimerTask() {
        public void run() {
            handler.post(new Runnable() {
                public void run() {
                    Vibrator vibrator = (Vibrator) ApplicationUtils.getContext().getSystemService(Context.VIBRATOR_SERVICE);
                    vibrator.vibrate(3000);
                    playSound();
                    Log.d("TIMER", "Timer set on");
                }
            });
        }
    };
    t.schedule(Task, 0, 30000); 
}

Este es el código que estoy usando en la sección de cierre de sesión

public void stopvib() {
    if (Task != null) {
    //  Log.d("TIMER", "timer canceled");
        t.cancel();
        Task.cancel();
    }
}

Nota: también quité elTask.cancel(); pero sigo recibiendo el mismo error

Mi vibración funciona bien antes de cerrar sesión y volver a iniciar sesión. Aparece un error.

java.lang.IllegalStateException: Timer was cancelled
    at java.util.Timer.scheduleImpl(Timer.java:562)
    at java.util.Timer.schedule(Timer.java:481)
    at com.vib(AlertListActivity.java:724)

¿Puede alguien ayudarme con esta codificación. ¿Qué hice mal?

Respuestas a la pregunta(3)

Su respuesta a la pregunta