Membuat delay pada Kolom Pencarian SearchView

aldan
2 min readJan 21, 2021

--

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

Pencarian pada Aplikasi Tokopedia

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 :

  1. Menghemat penggunaan server
  2. Menghemat penggunaan database
  3. 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.

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

--

--

aldan
aldan

Written by aldan

ⓘ I set time limit for this app per day. User is temporarily inactive.

No responses yet

Write a response