مقالات اندروید

RXJava و برنامه نویسی reactive

RxJava یا برنامه نویسی reactive در اندروید :

مفهوم الگوی طراحی Observer چیست؟

برنامه نویسی Reactive در اندروید چیست ؟

چرا باید از برنامه نویسی Reactiveاستفاده کنیم؟

الگوی طراحی Observer :

برای درک بهتر با مثال شروع میکنیم . فرض کنید شما از مطالب یک کانال در یوتیوب خیلی خوشتون میاد و دوست دارید هر وقت مطلب جدیدی توی اون کانال منتشر میشه مطلع بشید. یک راه این هست که مرتب به اون کانال سر بزنید تا مطالبش رو از دست ندید ولی راه خوبش این هست که شما توی اون کانال subscribe کنید . حالت دوم در واقع همون الگوی طراحی Observer است .

به کانال مبدا Observable یا Publisher میگیم و به شما که subscribe کردید تا هر وقت مطلب جدید اومد مطلع بشید Observer یا Subscriber میگیم. در دنیای برنامه نویسی Observable و Observer هر دو کلاسهایی هستند که ازشون Object ساخته میشه.

یک کلاس Observable دیتا رو منتشر (Publish) میکنه و یک کلاس Observer دیتای منتشر شده توسط کلاس Observable رو میگیره .

توجه کنید که کلاس Observer تا وقتی برای دریافت دیتا از کلاس Observable سابسکرایب(Subscribe) نکرده باشه دیتایی رو دریافت نمیکنه.

برنامه نویسی Reactive در اندروید :

وقتی گفته میشه که در اندروید از برنامه نویسی Reactive استفاده کردیم منظور اینه که برای کارهای مختلف  Observable ها و Observer ها رو به کار بردیم. مثلا فرض کنید قراره یک سری دیتا رو در RecyclerView نمایش بدیم .

برای اینکار اگه بخوایم از برنامه نویسی Reactive استفاده کنیم میتونیم یک Observable داشته باشیم که دیتای مورد نظر ما رو Publish کنه و یک Observer داشته باشیم که دیتای منتشر شده رو بگیره و در RecyclerView نمایش بده .

همانطور که قبلا اشاره کردم Observer با دیتایی که میگیره یک کاری انجام میده مثلا توی این مثال دیتا رو در RecyclerView نمایش میده .

ممکنه در جای دیگه دیتایی رو که گرفته توی دیتابیس ذخیره کنه و یا هر کار دیگه ای رو با دیتایی که میگیره انجام بده.

یک Observable میتواند هر تعداد Observer یا Subscriber داشته باشد. هر وقت Observable یک آیتم دیتای جدید رو منتشر کنه متد OnNext هر کدام از Subscriber ها فراخوانی میشود .

هر وقت Observable کار انتشار کل دیتای مورد نظرش رو به طور موفق انجام بدهد متدOnComplete هر کدام از Subscriber ها فراخوانی میشود .

هر وقت Observable موقع انتشار دیتای خود با مشکل مواجه شود متد OnError هر کدام از Subscriber ها فراخوانی میشود .

چرا استفاده از برنامه نویسی Reactive ؟

استفاده از برنامه نویسی Reactive در اندروید ، باعث میشه برای کارهای پیچیده کد کمتری بنویسید و در نتیجه خوانایی کدهاتون افزایش پیدا میکنه و همین امر باعث میشه که دیباگ برنامه و پیدا کردن خطا راحت تر انجام بشه .

علاوه بر این موارد ، موقعی که در برنامه هاتون ازMultithreading استفاده میکنید کارتون خیلی راحت میشه .

برای مثال شما میتوانید بگید که Observable دیتای خود را در ترد بک گراند تولید کنه وObserver درmain thread دیتا را دریافت کرده و از آنها استفاده کند .

یک مثال ساده از RXJava و برنامه نویسی reactive در اندروید :

1 . در گوگل سرچ کنید :

rxandroid github

2 . لینک زیر را باز کنید :

ReactiveX/RxAndroid: RxJava bindings for Android – GitHub

در اینجا میتوانید توضیحات مفصل RXJava و برنامه نویسی reactive در اندروید را مشاهده کنید .

3 . یک پروژه جدید ایجاد کنید و کتابخانه های زیر را به گردل مربوط به پروژه اضاف کنید :

توجه : ورژن این 2 کتابخانه بستگی به زمان استفاده شما دارد .

implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
implementation 'io.reactivex.rxjava2:rxjava:2.2.9'

4 . طراحی لی اوت (activity_main.xml) :

فایل لی اوت را به شکل زیر طراحی کنید .

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/txt"
        android:text="Click Button To Subscribe"
        android:textSize="24sp"
        android:textStyle="bold"
        android:layout_marginTop="80dp"
        android:layout_marginLeft="40dp"
        android:layout_marginRight="40dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <Button
        android:id="@+id/subscribe"
        android:text="subscribe"
        android:onClick="subscribeNow"
        android:layout_marginTop="160dp"
        android:layout_marginLeft="40dp"
        android:layout_marginRight="40dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

</RelativeLayout>

5 . کدهای مربوط به (MainActivity.java) :

package elecomco.com.rxjavaapp;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;

import io.reactivex.Observable;
import io.reactivex.Observer;
import io.reactivex.disposables.Disposable;

public class MainActivity extends AppCompatActivity {


    private TextView txt;

    private Observable<String> mObservable;
    private Observer<String> mObserver;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        txt=findViewById(R.id.txt);

        mObservable=Observable.just("Hello from RXandroid");
        mObserver=new Observer<String>() {
            @Override
            public void onSubscribe(Disposable d) {

            }

            @Override
            public void onNext(String s) {
                txt.setText(s);
            }

            @Override
            public void onError(Throwable e) {

            }

            @Override
            public void onComplete() {

            }
        };


    }

    public void subscribeNow(View view){
        mObservable.subscribe(mObserver);
    }

}

6 . اجرای برنامه :

RXJava و برنامه نویسی reactive
RXJava و برنامه نویسی reactive
RXJava و برنامه نویسی reactive

توضیحات :

تعریف های متغیرهای زیر برای Observable و Observer کردن :

private Observable mObservable;

private Observer mObserver;

تعریف تابع subscribeNow برای سابسکرایب کردن :

public void subscribeNow(View view){
mObservable.subscribe(mObserver);
}

توسط تابع just رشته Hello from RXandroid را هنگام سابسکرایب کردن در TextView مربوطه نمایش میدهیم .

برای اینکار در متد onNext متن مربوطه را تنظیم میکنیم .

در آخر با کلیک دکمه متن مربوطه با سابسکرایب کردن نمایش داده میشود .

مبحث RXJava و برنامه نویسی reactive به همراه معماری MVP و کار با آنها در کنار هم ، در دوره صفر تا صد اندروید به صورت کامل با انجام یک پروژه حرفه ای ، آموزش داده شده است

یک پاسخ بنویسید

avatar
Photo and Image Files
 
 
 
Audio and Video Files
 
 
 
Other File Types
 
 
 
  مشترک شدن  
اطلاع رسانی کن