RxJava-তে Disposable হলো একটি ইন্টারফেস, যা Subscription পরিচালনা করতে সাহায্য করে। যখন একটি Observable এবং Observer-এর মধ্যে subscription হয়, তখন এটি asynchronous স্ট্রিম চালাতে শুরু করে। কোনো নির্দিষ্ট সময়ে subscription বন্ধ করার প্রয়োজন হতে পারে, যাতে memory leaks এড়ানো যায়। এই কাজটি Disposable-এর মাধ্যমে করা হয়।
Disposable-এর ভূমিকা:
- Subscription বন্ধ করা:
Subscription চালু থাকা অবস্থায় যখন আর প্রয়োজন নেই, তখনdispose()মেথডের মাধ্যমে subscription বন্ধ করা যায়। - Memory Leak এড়ানো:
দীর্ঘ সময় ধরে subscription চালু থাকলে memory leak হতে পারে। Disposable ব্যবহার করে এ ধরনের সমস্যা এড়ানো যায়। - Lifecycle Management:
Subscription বন্ধ করা lifecycle-এর একটি গুরুত্বপূর্ণ অংশ, বিশেষ করে Android অ্যাপ্লিকেশনে যেখানে Activity বা Fragment destroy হওয়ার সঙ্গে subscription বন্ধ করতে হয়।
Disposable-এর ব্যবহার:
সাধারণ উদাহরণ:
import io.reactivex.rxjava3.core.Observable;
import io.reactivex.rxjava3.disposables.Disposable;
public class DisposableExample {
public static void main(String[] args) {
// Observable তৈরি করা
Observable<String> observable = Observable.just("Item 1", "Item 2", "Item 3");
// Subscription এবং Disposable গ্রহণ করা
Disposable disposable = observable.subscribe(
item -> System.out.println("Received: " + item), // onNext
error -> System.err.println("Error: " + error), // onError
() -> System.out.println("Complete!") // onComplete
);
// Subscription বন্ধ করা
disposable.dispose();
System.out.println("Is disposed: " + disposable.isDisposed());
}
}
বর্ণনা:
subscribe()মেথডের রিটার্ন টাইপ হলো Disposable।dispose()মেথডটি ডাকা হলে subscription বন্ধ হয়ে যায়।
CompositeDisposable:
একটি অ্যাপ্লিকেশনে অনেক Disposable থাকতে পারে। একাধিক subscription একসঙ্গে পরিচালনা করতে CompositeDisposable ব্যবহার করা হয়। এটি Disposable-এর একটি সংগ্রহ।
CompositeDisposable উদাহরণ:
import io.reactivex.rxjava3.core.Observable;
import io.reactivex.rxjava3.disposables.CompositeDisposable;
import io.reactivex.rxjava3.disposables.Disposable;
public class CompositeDisposableExample {
public static void main(String[] args) {
CompositeDisposable compositeDisposable = new CompositeDisposable();
Observable<String> observable1 = Observable.just("Observable 1");
Observable<String> observable2 = Observable.just("Observable 2");
// প্রথম Disposable যোগ করা
Disposable disposable1 = observable1.subscribe(
item -> System.out.println("Received from observable1: " + item)
);
// দ্বিতীয় Disposable যোগ করা
Disposable disposable2 = observable2.subscribe(
item -> System.out.println("Received from observable2: " + item)
);
// CompositeDisposable-এ Disposable যোগ করা
compositeDisposable.add(disposable1);
compositeDisposable.add(disposable2);
// সব Disposable বন্ধ করা
compositeDisposable.dispose();
System.out.println("Are all disposed: " + compositeDisposable.isDisposed());
}
}
বর্ণনা:
- CompositeDisposable-এ একাধিক Disposable যোগ করা যায়।
- একবার
dispose()কল করলে সব Disposable বন্ধ হয়ে যায়।
Android অ্যাপ্লিকেশনে Disposable-এর ব্যবহার:
Android অ্যাপে Activity বা Fragment destroy হওয়ার সময় subscription বন্ধ করা গুরুত্বপূর্ণ। Disposable এই কাজটি lifecycle-aware পদ্ধতিতে করতে সাহায্য করে।
Android উদাহরণ:
public class MainActivity extends AppCompatActivity {
private CompositeDisposable compositeDisposable = new CompositeDisposable();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Observable<String> observable = Observable.just("Hello", "RxJava");
// Subscription তৈরি এবং CompositeDisposable-এ যোগ করা
Disposable disposable = observable
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(item -> Log.d("RxJava", "Received: " + item));
compositeDisposable.add(disposable);
}
@Override
protected void onDestroy() {
super.onDestroy();
// সমস্ত Disposable বন্ধ করা
compositeDisposable.clear();
}
}
বর্ণনা:
- onCreate()-এ subscription শুরু হয় এবং onDestroy()-এ subscription বন্ধ হয়।
compositeDisposable.clear()ডাকা হলে সব Disposable বন্ধ হয়ে যায়।
Disposable ব্যবহারের সুবিধাসমূহ:
- Memory Management: দীর্ঘ সময় ধরে চলা subscription-এর কারণে memory leak হওয়া প্রতিরোধ করে।
- Lifecycle Management: Activity বা Fragment destroy হওয়ার সময় subscription বন্ধ করা সহজ হয়।
- Concurrency Control: একাধিক subscription সহজে পরিচালনা করা যায়।
- Readable Code: Disposable কোডের জটিলতা কমিয়ে পড়া এবং রক্ষণাবেক্ষণ সহজ করে।
RxJava-তে Disposable একটি গুরুত্বপূর্ণ উপাদান, বিশেষ করে asynchronous stream ব্যবস্থাপনার জন্য। এটি কোডকে আরও দক্ষ এবং পরিষ্কার করে তোলে।
Read more