android - ইউট - সাবস্ক্রাইব বাড়ানোর উপায়




সাবস্ক্রাইব ফলাফল ব্যবহার করা হয় না (4)

আমি আজ অ্যান্ড্রয়েড স্টুডিও ৩.১ এ আপগ্রেড করেছি, যা দেখে মনে হচ্ছে আরও কয়েকটি লিঙ্ক চেক যুক্ত হয়েছে। এই লিন্ট চেকগুলির মধ্যে একটি হ'ল আর-শট আরএক্সজাভা 2 subscribe() কলগুলির জন্য যা কোনও ভেরিয়েবলে সংরক্ষণ করা হয় না। উদাহরণস্বরূপ, আমার রুম ডাটাবেস থেকে সমস্ত খেলোয়াড়ের একটি তালিকা পাওয়া:

Single.just(db)
            .subscribeOn(Schedulers.io())
            .subscribe(db -> db.playerDao().getAll());

একটি বড় হলুদ ব্লক এবং এই সরঞ্জামদণ্ডের ফলাফল:

subscribe ফলাফল ব্যবহার করা হয় না

এই জাতীয় ওয়ান-শট আরএক্স কলগুলির জন্য সেরা অনুশীলন কী? আমার কি Disposable এবং Disposable dispose() সম্পূর্ণ রাখা উচিত? অথবা আমি কি কেবলমাত্র @SuppressLint এগিয়ে গিয়ে এগিয়ে যেতে পারি?

এটি কেবল RxJava2 ( io.reactivex ) প্রভাবিত করে বলে মনে হচ্ছে, আরএক্সজাভা ( io.reactivex ) এর এই লিঙ্কটি নেই।


আপনার সাবস্ক্রিপশনটি নিষ্পত্তি না করা হলে কী সম্ভাব্য প্রভাব পড়তে পারে তা IDE জানে না, সুতরাং এটি এটিকে সম্ভাব্য অনিরাপদ হিসাবে বিবেচনা করে। উদাহরণস্বরূপ, আপনার সিঙ্গলে একটি নেটওয়ার্ক কল থাকতে পারে, যা যদি আপনার Activity কার্যকর করার সময় ছেড়ে দেওয়া হয় তবে মেমরি ফাঁস হতে পারে।

প্রচুর পরিমাণে Disposable গুলি পরিচালনা করার একটি সুবিধাজনক উপায় হ'ল Disposable ব্যবহার করা; আপনার ঘেরের ক্লাসে কেবল একটি নতুন CompositeDisposable ইনস্ট্যান্স ভেরিয়েবল তৈরি করুন, তারপরে আপনার সমস্ত ডিসপোজেবলগুলি সংমিশ্রণযোগ্য ডিসপোজেবলের সাথে যুক্ত করুন (আরএক্সকোটলিনের সাহায্যে আপনি কেবলমাত্র আপনার সমস্ত ডিসপোজেবলগুলিতে addTo(compositeDisposable) যুক্ত করতে পারেন)। অবশেষে, আপনি যখন আপনার দৃষ্টান্তটি সম্পন্ন করবেন, তখন compositeDisposable.dispose() কল করুন।

এটি লিন্টের সতর্কতাগুলি থেকে মুক্তি পাবে এবং আপনার Disposables সঠিকভাবে পরিচালিত হয়েছে তা নিশ্চিত করবে।

এই ক্ষেত্রে, কোডটি দেখতে এমন হবে:

CompositeDisposable compositeDisposable = new CompositeDisposable();

Disposable disposable = Single.just(db)
        .subscribeOn(Schedulers.io())
        .subscribe(db -> db.get(1)));

compositeDisposable.add(disposable); //IDE is satisfied that the Disposable is being managed. 
disposable.addTo(compositeDisposable); //Alternatively, use this RxKotlin extension function.


compositeDisposable.dispose(); //Placed wherever we'd like to dispose our Disposables (i.e. in onDestroy()).

আপনি DisposableSingleObserver সাথে সদস্যতা নিতে পারেন:

Single.just(db)
    .subscribeOn(Schedulers.io())
    .subscribe(new DisposableSingleObserver<Object>() {
            @Override
            public void onSuccess(Object obj) {
                // work with the resulting todos...
                dispose();
            }

            @Override
            public void onError(Throwable e) {
                // handle the error case...
                dispose();
            }});

আপনার যদি সরাসরি Single বস্তু নিষ্পত্তি করতে হয় (উদাহরণস্বরূপ এটি নির্গত হওয়ার আগে) আপনি Disposable রেফারেন্স পেতে ও ব্যবহার করতে onSubscribe(Disposable d) পদ্ধতি প্রয়োগ করতে পারেন।

আপনি নিজের দ্বারা SingleObserver ইন্টারফেস উপলব্ধি করতে পারেন বা অন্যান্য শিশু ক্লাস ব্যবহার করতে পারেন।


কার্যকলাপটি ধ্বংস হয়ে যাওয়ার সাথে সাথে ডিস্পোজেবলের তালিকা সাফ হয়ে যায় এবং আমরা ভাল।

io.reactivex.disposables.CompositeDisposable mDisposable;

    mDisposable = new CompositeDisposable();

    mDisposable.add(
            Single.just(db)
                    .subscribeOn(Schedulers.io())
                    .subscribe(db -> db.get(1)));

    mDisposable.dispose(); // dispose wherever is required

প্রস্তাবিত হিসাবে আপনি সেখানে সাবস্ক্রাইব অপারেশনের ফলাফল যুক্ত করতে কিছু বৈশ্বিক CompositeDisposable ব্যবহার করতে পারেন।

RxJava2Extensions লাইব্রেরিতে RxJava2Extensions থেকে সম্পূর্ণরূপে তৈরি হওয়া ডিসপোজেবল থেকে স্বয়ংক্রিয়ভাবে তৈরি করার জন্য দরকারী পদ্ধতি রয়েছে। subscribeAutoDispose বিভাগটি দেখুন।

আপনার ক্ষেত্রে এটি দেখতে দেখতে এটি হতে পারে

SingleConsumers.subscribeAutoDispose(
    Single.just(db)
            .subscribeOn(Schedulers.io()),
    composite,
    db -> db.playerDao().getAll())






android-studio-3.1