Mengenal CountDownTimer di Android: Panduan Lengkap dengan Contoh Java

CountDownTimer adalah fitur di Android yang memungkinkan kita menjalankan hitungan mundur dalam aplikasi. Fitur ini sering digunakan untuk berbagai keperluan seperti timer pada kuis, penghitung waktu mundur untuk promosi, atau fitur batas waktu dalam aplikasi.

Dalam artikel ini, kita akan membahas secara mendalam bagaimana cara menggunakan CountDownTimer di Android dengan contoh implementasi dalam Java.


Apa Itu CountDownTimer?

CountDownTimer adalah kelas bawaan Android yang memungkinkan kita membuat penghitung waktu mundur dengan dua parameter utama:

  • MillisInFuture → Waktu total hitungan mundur dalam milidetik.
  • CountDownInterval → Interval dalam milidetik setiap kali callback dipanggil selama hitungan mundur berlangsung.

Dengan CountDownTimer, kita bisa mengatur aksi yang terjadi saat timer sedang berjalan dan saat waktu habis.


Cara Menggunakan CountDownTimer di Android

1. Membuat CountDownTimer Sederhana

Berikut contoh dasar pembuatan CountDownTimer yang berjalan selama 10 detik, dengan interval 1 detik, dan menampilkan waktu yang tersisa dalam Log.d():

import android.os.CountDownTimer;
import android.util.Log;

public class MyTimer {

public void startTimer() {
new CountDownTimer(10000, 1000) {

public void onTick(long millisUntilFinished) {
// Akan dipanggil setiap 1 detik selama timer berjalan
Log.d("CountDownTimer", "Waktu tersisa: " + millisUntilFinished / 1000 + " detik");
}

public void onFinish() {
// Akan dipanggil ketika waktu habis
Log.d("CountDownTimer", "Waktu habis!");
}
}.start();
}
}

Penjelasan kode:

  • Timer dimulai dengan 10000 milidetik (10 detik) dan interval 1000 milidetik (1 detik).
  • onTick(long millisUntilFinished) dipanggil setiap detik dan menampilkan sisa waktu dalam log.
  • onFinish() dipanggil saat timer mencapai 0 detik.

2. Implementasi CountDownTimer dengan UI (TextView dan Button)

Sekarang, kita akan menampilkan waktu hitungan mundur dalam TextView dan memberikan Button untuk memulai ulang timer.

Langkah 1: Buat Layout XML (activity_main.xml)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center"
android:padding="20dp">

<TextView
android:id="@+id/timerTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="10"
android:textSize="30sp"
android:textStyle="bold" />

<Button
android:id="@+id/startButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Start Timer"
android:layout_marginTop="20dp"/>

</LinearLayout>

Langkah 2: Implementasi CountDownTimer di MainActivity.java

import android.os.Bundle;
import android.os.CountDownTimer;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

private TextView timerTextView;
private Button startButton;
private CountDownTimer countDownTimer;
private long timeLeftInMillis = 10000; // 10 detik

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

timerTextView = findViewById(R.id.timerTextView);
startButton = findViewById(R.id.startButton);

startButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startTimer();
}
});
}

private void startTimer() {
countDownTimer = new CountDownTimer(timeLeftInMillis, 1000) {
@Override
public void onTick(long millisUntilFinished) {
timeLeftInMillis = millisUntilFinished;
updateTimerText();
}

@Override
public void onFinish() {
timerTextView.setText("Waktu habis!");
}
}.start();
}

private void updateTimerText() {
int seconds = (int) (timeLeftInMillis / 1000);
timerTextView.setText(String.valueOf(seconds));
}
}

Penjelasan kode:

  1. Saat tombol Start Timer ditekan, startTimer() dipanggil untuk memulai hitungan mundur.
  2. onTick() memperbarui TextView setiap detik dengan waktu yang tersisa.
  3. onFinish() menampilkan teks “Waktu habis!” setelah waktu mencapai 0.

3. Menambahkan Fungsi Pause dan Resume Timer

Kadang kita ingin bisa menjeda (pause) dan melanjutkan (resume) CountDownTimer. Berikut cara menambahkannya:

Langkah 1: Update Layout XML (activity_main.xml)

Tambahkan dua tombol untuk Pause dan Resume.

<Button
android:id="@+id/pauseButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Pause Timer"
android:layout_marginTop="10dp"/>

<Button
android:id="@+id/resumeButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Resume Timer"
android:layout_marginTop="10dp"/>

Langkah 2: Update MainActivity.java

private Button pauseButton, resumeButton;
private boolean isPaused = false;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

timerTextView = findViewById(R.id.timerTextView);
startButton = findViewById(R.id.startButton);
pauseButton = findViewById(R.id.pauseButton);
resumeButton = findViewById(R.id.resumeButton);

startButton.setOnClickListener(v -> startTimer());
pauseButton.setOnClickListener(v -> pauseTimer());
resumeButton.setOnClickListener(v -> resumeTimer());
}

private void startTimer() {
countDownTimer = new CountDownTimer(timeLeftInMillis, 1000) {
@Override
public void onTick(long millisUntilFinished) {
timeLeftInMillis = millisUntilFinished;
updateTimerText();
}

@Override
public void onFinish() {
timerTextView.setText("Waktu habis!");
}
}.start();
}

private void pauseTimer() {
if (countDownTimer != null) {
countDownTimer.cancel();
isPaused = true;
}
}

private void resumeTimer() {
if (isPaused) {
startTimer();
isPaused = false;
}
}

Kesimpulan

CountDownTimer sangat berguna untuk berbagai aplikasi Android, terutama untuk fitur timer, hitungan mundur kuis, batas waktu aktivitas, atau fitur promosi berbasis waktu.

Dengan contoh di atas, Anda bisa:

✅ Membuat timer sederhana
✅ Menampilkan hitungan mundur di UI
✅ Menambahkan fitur pause dan resume

Semoga panduan ini membantu!