Delay digunakan untuk menunda waktu pengeksekusian baris script tertentu. Delay biasa digunakan untuk menunggu interaksi user atau menunggu proses/thread lain selesai, atau sekedar untuk member efek tertentu pada tampilan. Pada pemrograman Java untuk Android, setidaknya ada dua macam method yang dapat dimanfaatkan sebagai delay, yakni handler.postDelayed dan thread.sleep. Ada perbedaan utama dari keduanya, walaupun efeknya sama yakni penundaan waktu eksekusi script berikutnya. Handler.postDelayed akan menunda waktu tanpa mengganggu thread lain sedangkan thread.sleep akan menghentikan semua proses di Android termasuk thread yang sedang aktif. Dengan kata lain thread.sleep merupakan delay yang sifatnya low level yang akan menghentikan semua activity di Android kecuali service yang running di background.
Untuk melihat perbedaan dari keduanya, mari kita buat eksperimen sederhana berikut ini.
Nama aplikasi : delayku
Objectives : melihat perbedaan delay handler.postDelayed dan thread.Sleep di Android
Langkah-langkah development:
- Jalankan IDE Eclipse, buat project baru dengan nama ‘delayku’ melalui menu File | New | Android Application Project. Tekan tombol ‘Next’ sampai jendela Wizard New Project selesai
- Buka tab activity_main.xml dan masuk mode GUI dengan menekan tab ‘Graphical Layout’. Tambahkan 2 komponen textView dan 2 komponen Button seperti pada gambar di bawah
- Masuk ke mode teks dengan mengklik tab ‘activirty_main.xml’ dan tambahkan baris berikut untuk menambahkan event onClick pada komponen Button
- Klik tab ‘MainActivity.Java’ dan tambahkan script berikut untuk menampilkan data tanggal dan waktu sekarang. Penjelasan tentang script ini dapat Anda baca pada artikel sebelumnya di Mengambil Data Tanggal dan Waktu di Android . Kegunaan script ini di project ‘delayku’ ini adalah sebagai thread yang dapat dilihat pengaruhnya dengan pemanggilan delay dengan handler.postDelayed dan thread.sleep.
public class MainActivity extends Activity {
private Handler handler = new Handler();
@Override
protectedvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//call timer
handler.postDelayed(runnable, 1000);
}
private Runnable runnable = new Runnable() {
@Override
publicvoid run() {
Calendar c1 = Calendar.getInstance();
SimpleDateFormat sdf1 = new SimpleDateFormat("d/M/yyyy h:m:s a");
String strdate1 = sdf1.format(c1.getTime());
TextView txtdate1 = (TextView) findViewById(R.id.textView1);
txtdate1.setText(strdate1);
handler.postDelayed(this, 1000);
}
};
- Tambahkan script berikut, sebagai event handler onClick masing-masing untuk komponen Button1 dan Button2.
public void button1onclick (View v){
TextView teks=(TextView) findViewById (R.id.textView2);
teks.setText("panggil delay, perhatikan jam di atas...");
//call delay
handler.postDelayed(runnable2, 5000);
}
public void button2onclick (View v) throws InterruptedException{
TextView teks=(TextView) findViewById (R.id.textView2);
teks.setText("panggil sleep, perhatikan jam di atas...");
Thread.sleep(5000);
teks.setText("ini tampilan setelah thread.sleep 5 detik");
}
- Tambahkan pula subrutin runnable2 yang dipanggil oleh handler.postDelayed sebagai berikut :
private Runnable runnable2 = new Runnable() {
@Override
publicvoid run() {
TextView teks=(TextView) findViewById (R.id.textView2);
teks.setText("ini tampilan setelah postDelayed 5 detik");
}
};
- Jalankan program di atas dengan menekan tombol Run (CTRL+F11) dan lihatlah hasilnya sebagai berikut:
Saat tombol ‘Button’ sebelah kiri ditekan
Saat tombol ‘Button’ sebelah kanan ditekan
Perhatikan saat tombol Button1 ditekan (Button sebelah kiri) tulisan jam tidak berhenti, sedangkan saat Button2 ditekan tulisan jam akan berhenti karena efek perintah thread.sleep
Penjelasan program :
Baris [9] s.d [22] : adalah script handler untuk menciptakan ‘objek’ Timer yang menampilkan data tanggal dan waktu sekarang. Lebih detailnya dapat Anda baca di artikel tentang memanggil objek timer di android dengan Java.
Baris [24] s.d [29] : digunakan sebagai event handler onClick Button1 yang difungsikan untuk memanggil delay menggunakan method Handler.postDelayed (runnable,interval). Perhatikan bahwa dalam event handler onClick button1 ini akan menunda pemanggilan function teks.setText(“ini tampilan setelah postDelayed 5 detik”); selama 5 detik setelah tombol Button1 diklik
Baris [31] s.d [36] : digunakan untuk memanggil delay menggunakan method thread.sleep
Baris [38] s.d [44] : merupakan kumpulan script yang dipanggil oleh handler.postDelayed setelah interval 5 detik (5000 ms)
Demikian materi pembelajaran tentang delay di Android menggunakan Java ini. Semoga bermanfaat untuk Anda. Materi kali ini sebenarnya pengembangan pada artikel-artikel sebelumnya yakni tentang timer. Dengan membaca artikel ini dan mempelajari contoh program di dalamnya, penulis harapkan pembaca dapat mengambil kesimpulan tentang delay menggunakan handler.postDelayed dan thread.sleep. Delay dengan Handle.postDelayed tidak akan mengganggu proses/thread lain sedangkan thread.sleep adalah delay dengan pengertian semua proses yang sedang aktif. Namun penulisan delay thread.sleep jauh lebih simpel dan ringkas ketimbang menggunakan handle.postDelayed. Pesan penulis, gunakanlah delay yang tepat pada aplikasi Android Anda sesuai dengan fungsi dan peruntukkannya.
Program di atas dapat Anda unduh selengkapnya di sini.
a Technopreneur – writer – Enthusiastic about learning AI, IoT, Robotics, Raspberry Pi, Arduino, ESP8266, Delphi, Python, Javascript, PHP, etc. Founder of startup Indomaker.com