آموزش اپراتور یا عملگر Buffer در RxJava
آموزش اپراتور یا عملگر Buffer در RxJava
2019-12-22
آموزش اپراتور ها یا عملگر های Min ، Max ، Sum و Average در RxJava
آموزش اپراتور ها یا عملگر های Min ، Max ، Sum و Average در RxJava
2019-12-28
آموزش اپراتور یا عملگر Debounce در RxJava

آموزش اپراتور یا عملگر Debounce در RxJava

آموزش اپراتور یا عملگر Debounce در RxJava ، در این پست از تجاری اپ ما یکی دیگر از عملگر های RxJava به نام Debounce را مورد بررسی قرار می دهیم.

آموزش اپراتور یا عملگر Debounce در RxJava

آموزش اپراتور یا عملگر Debounce در RxJava
آموزش اپراتور یا عملگر Debounce در RxJava

اپراتور Debounce آیتم ها را تنها زمانی منتشر می کند که به یک بازه زمانی که ما مشخص می کنیم برسند.بیشترین کاربرد عملگر Debounce زمانی است که می خواهیم یک سری داده ها را به سرعت منتشر کنیم اما تنها زمانی که بشود از آنها استفاده کرد.

برای واضح تر شدن مفهوم اپراتور Debounce یک مثال خیلی کاربردی که تنها با Debounce() قابل اجراست را درادامه توضیح خواهیم داد.

اگر در اپلیکیشن گزینه جستجو داشته باشیم و می خواهیم جستجو به صورت آنی یا Realtime نتیجه دهد پس نیاز داریم که با وارد کردن هر کاراکتر توسط کاربر در لیست موجود جستجو انجام شود و نتیجه ها جدید شود.

خب طبیعتا این که با وارد کردن هرکاراکتر عملیات جستجو انجام شود کار بهینه ای نیست و حتی ممکن است کارایی اپ را کاهش دهد و سرعت را کند کند.

اینجاست که میتوان از عملگر Debounce استفاده کرد. بدین صورت که یک بازه 300 میلی ثانیه ای بین تایپ کاربر قرار داد بدین معنا که اگر کاربر فاصله بین تایپ هر کاراکترش کمتراز 300 میلی ثانیه بود عملیات جستجو انجام نشود و تنها اگر بین تایپ 300 میلی ثانیه فاصله افتاد عملیات جستجو انجام شود و نتیجه جدید شود به مثال زیر توجه کنید:

Observable obs; 
  obs = RxTextView.textChanges(activity.getBinding().edtUsername).
            filter(charSequence ->
            {
                    Log.e("filter run  ", charSequence.toString());
                    return charSequence.length() > 3 && !baseUsername.equals(charSequence);
            })
            .debounce(2000, TimeUnit.MILLISECONDS)
            .map(charSequence -> {
                    Log.e("map run  ", charSequence.toString());
                    return charSequence.toString();
            });
    obs.subscribe(s -> {
            Log.e("obs.subscribe run  ", s);
            if (!s.equals(baseUsername))
                checkUsername(s);
    });

امیدوارم این آموزش برای شما مفید بوده باشد…

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *