অ্যান্ড্রয়েডে আরএক্সজবা কখন ব্যবহার করবেন এবং অ্যান্ড্রয়েড আর্কিটেকচারাল উপাদানগুলি থেকে কখন লাইভ ডেটা ব্যবহার করবেন?


185

আমি অ্যান্ড্রয়েডে আরএক্সজাভা এবং অ্যান্ড্রয়েড আর্কিটেকচারাল উপাদানগুলি থেকে লাইভডাটা ব্যবহার করার কারণ পাচ্ছি না I যদি উভয়ের মধ্যে ব্যবহারের ক্ষেত্রে এবং পার্থক্যগুলি কোড আকারে নমুনা উদাহরণ সহ ব্যাখ্যা করা হয় যা উভয়ের মধ্যে পার্থক্য ব্যাখ্যা করে তবে তা সত্যই সহায়ক হবে।


5
আপনি কি এখনও কোনও ভাল কারণ খুঁজে পেয়েছেন? আমিও তাই ভাবছি ...
ইগোরগানপলস্কি

উত্তর:


117

অ্যান্ড্রয়েড লাইভ ডেটা সক্রিয় / নিষ্ক্রিয় রূপান্তর সংযোজন সহ মূল পর্যবেক্ষক প্যাটার্নের একটি বৈকল্পিক। এমনিতেই এটি এর পরিধি খুব সীমাবদ্ধ।

বর্ণিত উদাহরণ ব্যবহার করে অ্যান্ড্রয়েড লাইভ ডেটাতে , অবস্থানের ডেটা পর্যবেক্ষণ করতে, এবং অ্যাপ্লিকেশন স্টেটের উপর ভিত্তি করে নিবন্ধন এবং নিবন্ধভুক্ত করতে একটি শ্রেণি তৈরি করা হয় is

আরএক্সজাভা অপারেটরগুলি সরবরাহ করে যা অনেক বেশি সাধারণীকরণ করা হয়। আসুন ধরে নেওয়া যাক এই পর্যবেক্ষণযোগ্য লোকেশন ডেটা সরবরাহ করবে:

Observable<LocationData> locationObservable;

পর্যবেক্ষণযোগ্য বাস্তবায়ন ব্যবহার করে নির্মিত হতে পারে Observable.create()কল ব্যাক ক্রিয়াকলাপগুলিতে মানচিত্র । যখন পর্যবেক্ষণযোগ্য সাবস্ক্রাইব করা হয়, কল কলটি নিবন্ধিত হয় এবং যখন এটি সাবস্ক্রাইব করা হয় তখন কল ব্যাকটি নিবন্ধভুক্ত থাকে। বাস্তবায়নের উদাহরণে প্রদত্ত কোডের সাথে খুব মিল রয়েছে।

আসুন আমরা ধরে নিই যে অ্যাপ্লিকেশন সক্রিয় থাকাকালীন আপনার কাছে এমন একটি পর্যবেক্ষণযোগ্য রয়েছে যা সত্যটি প্রকাশ করে:

Observable<Boolean> isActive;

তারপরে আপনি নিম্নলিখিত দ্বারা লাইভডাটার সমস্ত কার্যকারিতা সরবরাহ করতে পারেন

Observable<LocationData> liveLocation =
  isActive
    .switchMap( active -> active ? locationObservable : Observable.never() );

switchMap()অপারেটর পারেন একটি স্ট্রিম হিসাবে বর্তমান অবস্থান, অথবা কিছুই প্রদান করবে যদি আবেদন সক্রিয় নয়। একবার আপনার liveLocationপর্যবেক্ষণযোগ্য হয়ে গেলে , আরএক্সজাভা অপারেটরগুলি ব্যবহার করে আপনি এটির সাথে অনেক কিছুই করতে পারেন। আমার প্রিয় উদাহরণটি হ'ল:

liveLocation.distinctUntilChanged()
  .filter( location -> isLocationInAreaOfInterest( location ) )
  .subscribe( location -> doSomethingWithNewLocation( location ) );

এটি কেবলমাত্র অবস্থানটি পরিবর্তন করার পরে অ্যাকশনটি সম্পাদন করবে এবং অবস্থানটি আকর্ষণীয়। আপনি একই অপারেশন তৈরি করতে পারেন যা গতি নির্ধারণ করতে সময় অপারেটরদের একত্রিত করে। আরও গুরুত্বপূর্ণ, আপনি আরএক্সজাভা অপারেটরগুলি ব্যবহার করে মূল থ্রেড, বা একটি পটভূমি থ্রেড, বা একাধিক থ্রেডে ক্রিয়াকলাপ ঘটবে কিনা তার বিশদ নিয়ন্ত্রণ সরবরাহ করতে পারেন।

আরএক্স জাভা এর বক্তব্যটি হ'ল এটি গ্রন্থাগার থেকে সরবরাহিত ক্রিয়াকলাপগুলি বা আপনার সরবরাহিত কাস্টম অপারেশনগুলি ব্যবহার করে একক মহাবিশ্বে নিয়ন্ত্রণ এবং সময়কে একত্রিত করে।

লাইভডাটা সেই মহাবিশ্বের কেবলমাত্র একটি ছোট অংশকে সম্বোধন করে, এটি নির্মাণের সমতুল্য liveLocation


2
ধন্যবাদ, লাইভডাটা ডক্সটি আর কোনও অবস্থানের নমুনাকে রেফারেন্স হিসাবে দেখায় না। এখানে আরও আকর্ষণীয় পয়েন্ট রয়েছে (একটি অবস্থানের নমুনা সহ): androidkt.com
ড্যানিয়েল উইলসন

5
@ ড্যানিয়েল উইলসন লিঙ্কটি আর পাওয়া যায় না।
তুরা

ড্যুড আমি এই লিঙ্কটিতে ডাব্লুটিএফ ছিল তা মনে করতে পারি না: লাইভ ডেটার জন্য মার্ক অ্যালিসনের নমুনা কোডটির
ড্যানিয়েল উইলসন

3
The point of RxJava is that it combines control and timing into a single universe, using operations provided from the library, or even custom operations that you provide. তবে লাইভডাটা লাইফসাইটটি সচেতন নয়। আমরা যদি আরএক্স ব্যবহার করি, তাহলে কি আমাদের জীবনচক্রের পরিবর্তনগুলি পরিচালনা করতে হবে না?
Sparker0i

@ স্পার্কার0 আই এখানে পয়েন্ট পেয়েছে। আরএক্সজাভা সচেতন সচেতন নয়। আমাদের ম্যানুয়ালি হ্যান্ডেল করতে হবে। লাইভডাটা যেমন এটি ইতিমধ্যে জীবনচক্রের যত্ন নেওয়া হয়।
Aks4125

119

মূল প্রশ্নটি সম্পর্কে, আরএক্সজাভা এবং লাইভডেটা উভয়ই একে অপরের পরিপূরককে খুব ভালভাবে পরিপূরক করে।

LiveDataঅ্যান্ড্রয়েড লাইফসাইকেলের সাথে এর টাইট ইন্টিগ্রেশন এবং ভিউমোডেল স্তরটিতে জ্বলজ্বল করে ViewModelRxJavaরূপান্তরকরণে আরও দক্ষতা সরবরাহ করে (যেমন @ بابি ডালগেলিশ উল্লেখ করেছেন)।

বর্তমানে, আমরা RxJavaডেটা উত্স এবং সংগ্রহস্থল স্তরগুলিতে ব্যবহার করছি এবং এটি ভিউমোডেলগুলিতে ( LiveDataব্যবহার LiveDataReactiveStreams/ ক্রিয়াকলাপ / খণ্ডগুলিতে ডেটা প্রকাশের আগে) রূপান্তরিত হয়েছি - এই পদ্ধতির সাথে বেশ খুশি।


8
যদি আমরা আপনাকে সঠিকভাবে বুঝতে পারি তবে লাইভডেটা কেবল অ্যান্ড্রয়েড ইউআই-নির্দিষ্ট প্রয়োগের জন্য কার্যকর। যদি আমরা কেবল ক্লিন আর্কিটেকচারের সাথে জেনেরিক অ্যাপ তৈরি করে এবং অন্য এই প্ল্যাটফর্মের সাথে এই আর্কিটেকচারটি ভাগ করে নিই, তবে আরএক্সজাভা লাইভডাটার চেয়ে ভাল ফিট?
ইগোরগানাপলস্কি

@ ইগোরগানাপলস্কি আপনি জেনেরিক অ্যাপের জন্য কোন ভাষা / ফ্রেমওয়ার্ক ব্যবহার করেন?
kzotin

জাভা / কোটলিনে অ্যান্ড্রয়েড-স্বতন্ত্র এপিআই এবং ক্লিন আর্চ লেখা।
ইগোরগানাপলস্কি

1
আপনার উত্তরে আপনি LiveDataReactiveStreams এর কোনও কার্যকারী উদাহরণের পরামর্শ দিতে পারেন?
পওয়ান

2
@ কেজোটিন আপনার এটির দরকার নেই observeOn, ফোন করেও তা LiveDataReactiveStreamsকরে LiveData.postValue()। আপনার subscribeOnসাধারণভাবে কোনও প্রভাব ফেলবে তার কোনও গ্যারান্টি নেই ।
arekolek

77

লাইভডেটা এবং আরএক্স জাভা এর মধ্যে অনেক পার্থক্য রয়েছে:

  1. লাইভডেটা কোনও স্ট্রিম নয় যখন RxJava তে সমস্ত কিছু (আক্ষরিক অর্থে সমস্ত কিছু) স্ট্রিম
  2. লাইভ ডেটা একটি পর্যবেক্ষণযোগ্য ডেটা ধারক শ্রেণি is একটি নিয়মিত পর্যবেক্ষণযোগ্য থেকে পৃথক, লাইভডাটা জীবনচর্চা-সচেতন, যার অর্থ এটি অন্যান্য অ্যাপ্লিকেশন উপাদানগুলির ক্রিয়াকলাপ, টুকরো বা পরিষেবাদির জীবনচক্রকে সম্মান করে। এই সচেতনতাটি নিশ্চিত করে যে কেবলমাত্র সক্রিয় জীবনচক্র অবস্থায় থাকা অ্যাপ্লিকেশন উপাদান পর্যবেক্ষকদের আপডেট করে লাইভডাটা।
  3. লাইভডাটা সিঙ্ক্রোনাস , সুতরাং আপনি আরএসএজভা-র মতোই কেবল লাইভ ডেটা ব্যবহার করে অবিচ্ছিন্নভাবে কোডের একটি অংশ (নেটওয়ার্ক কল, ডাটাবেস ম্যানিপুলেশন ইত্যাদি) কার্যকর করতে পারবেন না।
  4. এই দুজনের বেশিরভাগটি কাজে লাগানোর জন্য আপনি সর্বোত্তম কী করতে পারেন তা হ'ল আপনার ব্যবসায়িক যুক্তি (নেটওয়ার্ক কল, ডেটা ম্যানিপুলেশন ইত্যাদি), রিপোজিটরিতে এবং এর বাইরে যা কিছু ঘটে তার জন্য আরএক্সজেবা ব্যবহার করা is ) এবং আপনার উপস্থাপনা স্তরের জন্য লাইভ ডেটা ব্যবহার করা। এটির মাধ্যমে, আপনি আপনার ইউআই এর জন্য আপনার ব্যবসায়ের যুক্তি এবং জীবনচক্র-সচেতন অপারেশনের জন্য রূপান্তর এবং স্ট্রিম ক্ষমতা পাবেন।
  5. লাইভডেটা এবং আরএক্সজাভা একসাথে ব্যবহার করা হলে একে অপরের প্রশংসা করে । আমার অর্থ হ'ল, আরএক্সজাভা দিয়ে সমস্ত কিছু করুন এবং শেষে আপনি যখন ইউআই আপডেট করতে চান, তখন আপনার পর্যবেক্ষণযোগ্যকে লাইভডাটাতে পরিবর্তন করতে নীচে দেওয়া কোডের মতো কিছু করুন। সুতরাং, আপনার ভিউ (ইউআই) ভিউমোডেলের লাইভ ডেটা পর্যবেক্ষণ করে যেখানে আপনার লাইভডেটা অ-পরিবর্তনীয় মিউটেবল লাইভ ডেটা (বা মিউটেবল লাইভ ডেটাটি পরিবর্তনীয় লাইভ ডেটা) ছাড়া কিছুই নয়।
  6. সুতরাং এখানে প্রশ্নটি হল, কেন আপনি এমনকি প্রথম স্থানে লাইভ ডেটা ব্যবহার করবেন? আপনি নীচে কোডটিতে দেখতে পাচ্ছেন, আপনি আরক্সজাভা থেকে মিউটেবল লাইভডেটা (বা লাইভডেটা) তে আপনার প্রতিক্রিয়া সঞ্চয় করেন এবং আপনার লাইভ ডেটা জীবনচক্র সচেতন, সুতরাং একরকমভাবে আপনার ডেটা লাইফাইসাইক্ল-সচেতন। এখন, কেবল সম্ভাবনাটি কল্পনা করুন যখন আপনার ডেটা নিজেই জানবে কখন এবং কখন ইউআই আপডেট করতে হবে না।
  7. লাইভডাটার কোনও ইতিহাস নেই (কেবলমাত্র বর্তমান অবস্থা)। অতএব, আপনার চ্যাট অ্যাপ্লিকেশনের জন্য লাইভ ডেটা ব্যবহার করা উচিত নয়।
  8. আপনি RxJava সঙ্গে LiveData ব্যবহার করেন, তখন আপনার মত কাপড় প্রয়োজন হবে না MediatorLiveData , SwitchMap ইত্যাদি তারা প্রবাহ নিয়ন্ত্রণ সরঞ্জাম এবং RxJava অনেকবার দ্বারা যে উত্তম।
  9. লাইভডাটা ডেটা ধারক হিসাবে এবং অন্য কিছুই হিসাবে দেখুন। আমরা এটিও বলতে পারি লাইভডাটা জীবনচক্র সচেতন ভোক্তা।

    public class RegistrationViewModel extends ViewModel {
        Disposable disposable;

        private RegistrationRepo registrationRepo;
        private MutableLiveData<RegistrationResponse> modelMutableLiveData =
                new MutableLiveData<>();

        public RegistrationViewModel() {
        }

        public RegistrationViewModel(RegistrationRepo registrationRepo) {
            this.registrationRepo = registrationRepo;
        }

        public void init(RegistrationModel registrationModel) {
            disposable = registrationRepo.loginForUser(registrationModel)
                    .subscribeOn(Schedulers.io())
                    .observeOn(AndroidSchedulers.mainThread())
                    .subscribe(new Consumer<Response<RegistrationResponse>>() {
                        @Override
                        public void accept(Response<RegistrationResponse>
                                                   registrationModelResponse) throws Exception {

                            modelMutableLiveData.setValue(registrationModelResponse.body());
                        }
                    });
        }

        public LiveData<RegistrationResponse> getModelLiveData() {
            return modelMutableLiveData;
        }

       @Override
       protected void onCleared() {
                super.onCleared();
            disposable.dispose();
         }
    }

5
লাইভডাটা ডেটা ধারক হিসাবে এবং অন্য কিছুই হিসাবে দেখুন। ==> হ্যাঁ
লু মর্দা

3
চমৎকার উদাহরণ। আপনি ডিসপোজেবল ঘোষণা করতে ভুলে গেছেন এবং এগুলি পরিষ্কার করে দেওয়া ভাল লাগবে onCleared
স্নিকোলাস

আপনি দয়া করে ব্যাখ্যা করতে পারেন লাইভটাটা কীভাবে সিনক্রোনাস হয়? আমি যতদূর জানি আমরা লাইভডাটা অবজেক্টটি অন্য থ্রেডে প্রেরণ করতে পারি এবং তারপরে সেই থ্রেডটি পোস্টালিউল করতে পারে যা পর্যবেক্ষক মেইনথ্রেডে শুনতে পারে।
হিতেশ বিশট

আপনি যদি আবার যা পড়েছিলেন তা যদি আপনি আবার পড়ে থাকেন তবে আপনি আরএক্সজেভা ব্যবহার করে যা করতে পারবেন লাইভডাটা ব্যবহার করে আপনি কেবল (অন্যদিকে, "সেখানে" "কেবল" ব্যবহার করেছেন) আর কোনও থ্রেডে কাজ করতে পারবেন না
অভিষেক কুমার

লাইফডাইকার পক্ষে লাইফাইসাইকেল কোনও বড় ডিফারেনটিটর নয়? আপনি 1. আপনার পাইপলাইনটি কী করতে হবে এবং আপনার শেষ ফলাফলগুলি কী তা বর্ণনা করুন, 2. "পর্যবেক্ষণ" ধারাগুলিতে ফলাফলটির সাবস্ক্রাইব করুন এবং তারপরে 3. পাইপলাইনটি কেবল তখনই পরিচালিত হচ্ছে যদি আপনার জীবনচক্রের অবস্থা এটির অনুমতি দেয়।
অগস্ট

29

আসলে, LiveData একটি মূলত বিভিন্ন হাতিয়ার নয় RxJavaসুতরাং কেন এটা যখন একটি স্থাপত্য উপাদান হিসাবে চালু হয় RxJavaএকটি observables করার সমস্ত সদস্যতা মজুত করে সহজে জীবনচক্র পরিচালিত পারতেন CompositeDispoable বস্তু এবং তারপর তাদের মধ্যে ত্যাগী onDestroy() এর Activity বা onDestroyView() এর Fragment শুধুমাত্র একটি ব্যবহার কোড লাইন?

আরএক্সবাভা ব্যবহার করে একবার মুভি অনুসন্ধান অ্যাপ্লিকেশন তৈরি করে এবং তারপরে এখানে লাইভ ডেটা ব্যবহার করে আমি এই প্রশ্নের পুরোপুরি উত্তর দিয়েছি ।

তবে সংক্ষেপে, হ্যাঁ, এটি পারে তবে এটির জন্য প্রথমে প্রাথমিক জীবনচক্র জ্ঞান ছাড়াও প্রাসঙ্গিক জীবনচক্র পদ্ধতিগুলি ওভাররাইড করা দরকার। এটি এখনও কারও জন্য বোধগম্য নয়, তবে আসল বিষয়টি হ'ল গুগল আই / ও 2018 এর জেটপ্যাক সেশনগুলির মধ্যে একটি অনুসারে অনেক বিকাশকারী লাইফাইসাইকেল পরিচালনা জটিল খুঁজে পান complex জীবনচক্র নির্ভরতা পরিচালনা না করার ফলে ক্র্যাশ ত্রুটিগুলি অন্য লক্ষণ হতে পারে যে কিছু বিকাশকারী, এমনকি যদি জীবনচক্রের জ্ঞাতযোগ্য হয় তবে তারা তাদের অ্যাপ্লিকেশনটিতে ব্যবহার করে প্রতিটি ক্রিয়াকলাপ / খণ্ডে এটি যত্ন নিতে ভুলে যায়। বৃহত্তর অ্যাপ্লিকেশনে এটি উত্পাদনশীলতার উপর theণাত্মক প্রভাব ফেলতে পারে তা সত্ত্বেও এটি একটি ইস্যুতে পরিণত হতে পারে।

মূল কথাটি হ'ল প্রবর্তন করার মাধ্যমে LiveData, বৃহত্তর সংখ্যক বিকাশকারীরা এমনকি জীবনচক্র পরিচালনা, মেমরি ফাঁস এবং ক্র্যাশ বুঝতে না পেরে এমভিভিএম গ্রহণ করবে বলে আশা করা হচ্ছে। যদিও আমার সন্দেহ নেই যে LiveDataএটি RxJavaক্ষমতা এবং শর্তগুলির সাথে তুলনীয় নয় যা এটি বিকাশকারীদেরকে, প্রতিক্রিয়াশীল প্রোগ্রামিংয়ের সাথে দেয় এবং RxJavaএটি অনেকের কাছে উপলব্ধি করা শক্ত ধারণা এবং সরঞ্জাম। অন্যদিকে, আমি মনে করি না যে এটি কেবল সহজলভ্য করতে পারে না LiveDatafor তবে RxJavaএটি অনেকগুলি বিকাশকারী দ্বারা অভিজ্ঞ বিতর্কিত বিস্তৃত ইস্যু পরিচালনার জন্য একটি খুব সহজ সরঞ্জাম meant

** আপডেট ** আমি এখানে একটি নতুন নিবন্ধ যুক্ত করেছি যেখানে আমি ব্যাখ্যা করেছি যে কীভাবে লাইভডাটা অপব্যবহারের ফলে অপ্রত্যাশিত ফলাফল হতে পারে। আরএক্সজেবা এই পরিস্থিতিতে উদ্ধার করতে আসতে পারেন



2
"কেন এটি চালু করা হয়েছিল যখন RxJava সহজেই সমস্ত সাবস্ক্রিপশন একটি LiveDataonStop
কমপোজাইটড ডিসপোজেবলের

আমার বোঝার থেকে @arekolek: এমনকি কমপোজাইটডিস্পোপাবল হ্যান্ডেল করার জন্য জীবনচক্রের পদ্ধতিগুলি ওভাররাইট করে। তবে লাইভ ডেটাতে সমস্ত কোডের একক লাইনে অন্তর্ভুক্ত থাকবে। সুতরাং আমরা কোড নূন্যতম 20 লাইন সংরক্ষণ করা হয়।
সুরেশ

আমরা একটি বেসফ্রেগমেন্ট সংজ্ঞায়িত করতে পারি এবং সমস্ত উত্পন্ন টুকরো টুকরো করে ছাড়ার জন্য ডিসপোজেবল [] সাবস্ক্রিপশন () পদ্ধতিটি সংজ্ঞায়িত করতে পারি, এই পদ্ধতিটি অনক্রিটভিউতে কল করতে পারি এবং একটি সম্মিলিত ডিসপোজেবলে রিটার্ন মান যুক্ত করতে পারি, এটি ডিসট্রয়েভিউতে নিষ্পত্তি করি, আর ভুলে যায় না।
android2013

এটি কেবল নিষ্পত্তি সম্পর্কে নয়। আরএক্সজাভা ব্যবহার করে আপনাকে অনস্টপে নিষ্পত্তি করতে হবে, তারপরে আবার স্টার্ট / অনরেউসুমে সাবস্ক্রাইব করতে হবে, কনফিগারেশন পরিবর্তনগুলি পরিচালনা করতে হবে এবং অন্যান্য জিনিসপত্রের গুচ্ছ করতে হবে। এজন্য আরএক্সজাভা ব্যবহার করে প্রচুর ক্র্যাশ হয়েছে। লাইভডেটা এগুলি সমস্ত পরিচালনা করে তবে RxJava এর মতো নমনীয় নয়।
user932178

24

যেমন আপনি প্রতিক্রিয়াশীল বাস্তুতন্ত্রের মধ্যে জানতে পারেন আমাদের একটি আছে যে পর্যবেক্ষণযোগ্য রয়েছে যা ডেটা বের করে এবং একটি পর্যবেক্ষক যা এই পর্যবেক্ষণযোগ্য নিঃসরণের সাবস্ক্রাইব করে (বিজ্ঞপ্তি পান), তথাকথিত পর্যবেক্ষক প্যাটার্ন কীভাবে কাজ করে তা আশ্চর্যের কিছু নয়। একটি পর্যবেক্ষণযোগ্য "চিত্কার" কিছু, পর্যবেক্ষককে অবহিত করা হবে যে প্রদত্ত মুহুর্তে কিছু পর্যবেক্ষণযোগ্য চিৎকার করতে পারে।

LiveDataএমন একটি পর্যবেক্ষণযোগ্য হিসাবে ভাবুন যা আপনাকে এমন activeঅবস্থায় থাকা পর্যবেক্ষকদের পরিচালনা করতে দেয় । অন্য কথায় LiveDataএকটি সাধারণ পর্যবেক্ষণযোগ্য তবে জীবনচক্রের যত্নও নেয়।

তবে আসুন আপনি যে দুটি কোডের জন্য অনুরোধ করেছেন সেটি দেখুন:

ক) লাইভ ডেটা

খ) আরএক্সজাভা

ক) এটি লাইভডাটার একটি প্রাথমিক প্রয়োগ

1) আপনি সাধারণত ওরিয়েন্টেশন পরিবর্তন বজায় রাখার জন্য ভিউমোডলে লাইভ ডেটা ইনস্ট্যান্ট করেন (কেবলমাত্র পঠিত লাইভ ডেটা বা লিখিতযোগ্য মিউটেবল লাইভ ডেটা থাকতে পারে, তাই আপনি সাধারণত লাইভডাটা ক্লাসের বাইরে প্রকাশ করেন)

2) প্রধান ক্রিয়াকলাপের OnCreateপদ্ধতিতে (ভিউমোডেল নয়) আপনি একটি পর্যবেক্ষক বস্তুটি "সাবস্ক্রাইব" করেন (সাধারণত একটি অন-চেঞ্জড পদ্ধতি)

3) আপনি লঞ্চটি লিংকটি স্থাপনের জন্য পর্যবেক্ষণ করুন

প্রথমে ViewModel(ব্যবসায়িক যুক্তির মালিক)

class ViewModel : ViewModel() { //Point 1

    var liveData: MutableLiveData<Int> = MutableLiveData()

}

এবং এটি MainActivity(যতটা সম্ভব বোবা)

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val ViewModelProvider= ViewModelProviders.of(this).get(ViewModel::class.java)

        ViewModelProvider.observe(this, Observer {//Points 2 and 3
            //what you want to observe
        })


        }
    }
}

খ) এটি আরএক্সজাবার প্রাথমিক প্রয়োগ

1) আপনি একটি পর্যবেক্ষণযোগ্য ঘোষণা

2) আপনি একটি পর্যবেক্ষক ঘোষণা

3) আপনি পর্যবেক্ষকের সাথে পর্যবেক্ষণযোগ্য সাবস্ক্রাইব

Observable.just(1, 2, 3, 4, 5, 6) // Point 1

   .subscribe(new Subscriber() {    //Points 2 & 3
       @Override
       public void onCompleted() {
           System.out.println("Complete!");
       }

       @Override
       public void onError(Throwable e) {
       }

       @Override
       public void onNext(Double value) {
           System.out.println("onNext: " + value);
       }
    });

বিশেষত স্থাপত্য উপাদানগুলির LiveDataসাথে Lifecycleএবং প্রায়শই ViewModel(যেমন আমরা দেখেছি) ব্যবহার করা হয়। আসলে যখন LiveDataভিউমোডেলের সাথে একত্রিত করা হয় তখন পর্যবেক্ষকের প্রতিটি পরিবর্তন আপনাকে রিয়েল টাইমে আপডেট রাখতে দেয় , যাতে ইভেন্টগুলি যেখানে প্রয়োজন হয় সেখানে রিয়েল টাইমে পরিচালিত হয়। লাইফসাইকেল এবং সম্পর্কিত বিষয়গুলি লাইফসাইকেলওউনার / লাইফ সাইকেলLiveData সম্পর্কে ধারণাটি ব্যবহার করার জন্য দৃ .়ভাবে সুপারিশ করা হয় , আপনি যদি বাস্তব জীবনের পরিস্থিতিতে বাস্তবায়ন করতে চান তবে আপনাকে ট্রান্সফরমেশনগুলি একবার দেখার পরামর্শ দিচ্ছি । এখানে আপনি দুর্দান্ত কমন্সওয়্যার থেকে কিছু ব্যবহারের ক্ষেত্রে সন্ধান করতে পারেন ।LiveData

মূলত মোড়ানোরLiveData জন্য সরলিকৃতRXJava, উপাদানগুলির মধ্যে সুস্পষ্ট তথাকথিত নির্ভরতা বিধি তৈরি না করে একাধিক উপাদান জুড়ে পরিবর্তনগুলি পর্যবেক্ষণ করার একটি দুর্দান্ত উপায়, যাতে আপনি কোডটি আরও সহজ করে পরীক্ষা করতে পারেন এবং এটিকে আরও পাঠযোগ্য। আরএক্সজাভা, আপনাকে লাইভডাটা এবং আরও অনেক কিছু করার অনুমতি দেয়। আরএক্সজাবার বর্ধিত কার্যকারিতার কারণে আপনি উভয়ই সহজ কেসের জন্য লাইভডেটা ব্যবহার করতে পারেন বা আরএক্সজাভা এর সমস্ত শক্তি কাজে লাগিয়ে অ্যান্ড্রয়েড আর্কিটেকচার উপাদানগুলিকে ভিউমোডেল হিসাবে ব্যবহারRXJavaকরতে পারেন, অবশ্যই এর অর্থ এটিআরও জটিল হতে পারে, কেবল ভাবেন এর পরিবর্তে কয়েকশত অপারেটর রয়েছে সুইচম্যাপ এবং লাইভডেটার মানচিত্র (এই মুহুর্তে)।

আরএক্সজাভা সংস্করণ 2 হ'ল একটি লাইব্রেরি যা অবজেক্ট ওরিয়েন্টেড দৃষ্টান্তকে বিপ্লব করেছে, প্রোগ্রামটির প্রবাহ পরিচালনা করার জন্য তথাকথিত কার্যকরী উপায় যুক্ত করে।


4

লাইভডেটা অ্যান্ড্রয়েড আর্কিটেকচার উপাদানগুলির একটি উপসেট যা অ্যান্ড্রয়েড দল দ্বারা বিকাশ করা হয়েছে।

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

আপনি যদি কেবল অ্যান্ড্রয়েড অ্যাপ্লিকেশন বিকাশে ব্যবহার করতে চান তবে অ্যান্ড্রয়েড আর্কিটেকচার উপাদানগুলির জন্য যান। অন্যথায়, আপনি যদি অন্যান্য জাভা অ্যাপ্লিকেশন, যেমন ওয়েব অ্যাপ, ডেস্কটপ অ্যাপ্লিকেশন ইত্যাদির ব্যবহার করতে চান তবে আরএক্সজেভা ব্যবহার করুন use


আমি আপনার উত্তর পরিষ্কার করার চেষ্টা করেছি। যদি আমি কোনওভাবেই আপনার মূল উদ্দেশ্যটির সাথে দ্বন্দ্ব বোধ করি তবে নির্দ্বিধায় সম্পাদনা করুন। আপনি যদি তা করেন তবে দয়া করে এটি প্রাথমিক সংশোধন থেকে পরিষ্কার করার চেষ্টা করুন। আপনার উত্তরের শেষ অংশটি সততার সাথে অর্থপূর্ণ হয়নি।
জো

2

LiveDataডেটা ধারক হিসাবে এবং কিছুই না। আমরা আরও বলতে পারি লাইভডাটা লাইফাইসাইক সচেতন ভোক্তা। LiveDataলাইফাইসাইকেলের ধারণা এবং সম্পর্কিত বিষয়গুলি লাইফ সাইকেলঅউনার / লাইফসাইকেলের সম্পর্কে দৃ strongly়রূপে সুপারিশ করা হয়, আপনি আপনার ইউআইয়ের জন্য আপনার ব্যবসায়ের যুক্তি এবং জীবনচক্র সচেতন অপারেশনের জন্য রূপান্তর এবং প্রবাহের ক্ষমতা পাবেন।

আরএক্স একটি শক্তিশালী সরঞ্জাম যা একটি মার্জিত ঘোষণামূলক শৈলীতে সমস্যার সমাধান করতে সক্ষম করে। এটি ব্যবসায়ের দিকের বিকল্পগুলি বা পরিষেবা এপিআই অপারেশনগুলি পরিচালনা করে


0

লাইভডাটা তুলনা করে আরএক্সজাভা আপেলকে ফলের সালাদের সাথে তুলনা করছে।

লাইভডাটা কন্টেন্টঅবেসভারের সাথে তুলনা করুন এবং আপনি আপেলের সাথে আপেলের তুলনা করছেন। লাইভডাটা কার্যকরভাবে কন্টেন্টঅবসভারের জন্য একটি জীবনচক্র সচেতন প্রতিস্থাপন হচ্ছে।

আরএক্সজাবাকে অ্যাসিঙ্কটাস্ক বা অন্য কোনও থ্রেডিং সরঞ্জামের সাথে তুলনা করা কমলাগুলির সাথে ফলের সালাদকে তুলনা করছে কারণ আরএক্সজাভা কেবল থ্রেডিংয়ের চেয়ে বেশি সাহায্য করে।


0
  • লাইভডেটা আংশিকভাবে আরএক্স সাবজেক্ট বা SharedRxObservable এর সমান

  • লাইভডাটা সাবস্ক্রিপশনটির জীবনচক্র পরিচালনা করে তবে আরএক্স সাবজেক্ট সাবস্ক্রিপশনটি ম্যানুয়ালি তৈরি এবং নিষ্পত্তি করা উচিত

  • লাইভডাটাতে সমাপ্তির স্থিতি নেই তবে আরএক্স সাবজেক্টটিতে অনআরর এবং অনকম্পল্ট রয়েছে

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.