Saat Anda melakukan pencarian agar terlihat smooth dan menghemat request data ke API, Kita dapat menerapkan delay pada SearchView (Android). Contohnya :

Ketika kita mengetik satu-persatu jika tidak menerapkan delay maka Aplikasi akan me-request tiap huruf tersebut ke API.
Simulasi jika kita mengetik kata “Helm unik” dengan total 10 huruf (dengan spasi) maka aplikasi akan 10 kali me-request data ke API. Bayangkan jika ada 1000 user secara bersamaan mencari keyword yang sama berarti 10 request x 1000 user = 10.000 request.
Simulasi tersebut dilakukan jika tidak menggunakan delay ketika proses pencarian.
Jika kita menerapkan delay berarti proses tersebut dilakukan ketika pengetikan huruf terakhir dari “Helm Unik” dan tidak ada aktivitas lain setelah pengetikan huruf “k”.
Misalnya Saya menerapkan 300 ms atau 0.3 detik ketika user mengetik huruf terakhir dari pencarian maka akan ada waktu yang menghitung jika tidak ada aktivitas atau huruf lain setelahnya selama waktu yang ditentukan yaitu 0.3 detik maka aplikasi baru me-request data ke API.
Yang artinya proses tersebut hanya memerlukan 1 request. Jika ada 1000 user secara bersamaan mencari keyword tersebut maka hanya ada 1000 request, lebih sedikit dibandingkan jika kita tidak menggunakan delay yaitu 10.000 request.
Tentu ini akan berpengaruh jika aplikasi tersebut digunakan oleh banyak user, antara lain :
- Menghemat penggunaan server
- Menghemat penggunaan database
- Menghemat penggunaan data dari user
Penerapan
Pada kali ini kita akan menerapkan sistem tersebut di Android menggunakan Bahasa Pemograman Kotlin.
Pertama, buat variabel untuk waktu delay yang akan kita gunakan (disesuaikan dengan kebutuhan) dan disini kita menggunakan CountDownTimer.
private val waitingTimeSearch: Long = 300 // Waktu Delay (ms)
private var cdtSaveSearch: CountDownTimer? = null
Selanjutnya, kita buat fungsi untuk menghitung mundur pada onQueryTextChange
override fun onQueryTextChange(query: String?): Boolean {
if (cdtSaveSearch != null) {
cdtSaveSearch!!.cancel()
}
cdtSaveSearch = object : CountDownTimer(waitingTimeSearch, 500){
override fun onTick(msUntilFinished: Long) {
Log.d(tag, "Waktu delay tersisa : " + msUntilFinished / 1000)
}
override fun onFinish() {
// Jalankan perintah jika waktu delay terlewati
Log.d(tag, "Delay terlewati")
}
}
(cdtSaveSearch as CountDownTimer).start()
}
Silahkan running program dan cek Debug pada Logcat.