البدء مع RxJava 2 الروبوت
Arabic (العربية/عربي) translation by Muhammad Hakim Almadani (you can also view the original English article)
إذا كنت مطور الروبوت، ثم كنت قد سمعت أشياء جيدة عن ركسجافا، إلى تنفيذ المصدر المفتوح شعبية للمكتبة ريكتيفيكس أن يجلب البرمجة التفاعلية لالة جافا الافتراضية (JVM).
ركسجافا يهدف إلى اتخاذ الأم الخروج من العمل مع تيارات غير متزامنة من البيانات — على الرغم من أن كما سترى، ركسجافا في تعريف "البيانات" واسع جداً. لأن ركسجافا مكتبة متوافقة مع JVM، يمكنك استخدامها على مجموعة واسعة من المنصات، ولكن في هذه السلسلة سوف تظهر لك كيفية استخدام 2 ركسجافا لتطوير الروبوت.
في نهاية هذه السلسلة عليك أن تتقن جميع أساسيات 2 ركسجافا حتى يمكن البدء في إنشاء تطبيقات عالية التفاعل التي يمكن معالجة طائفة واسعة من البيانات المتزامن وغير المتزامن – جميعا باستخدام التعليمات البرمجية التي أكثر إيجازاً ويمكن التحكم فيها من عادة سيكون قادراً على تحقيق مع جاوة وحدها.
وبالإضافة إلى توفير مقدمة للقادمين الجدد ركسجافا، إذا كنت المخضرم 1 ركسجافا الذي يتطلع إلى تحقيق القفزة إلى ركسجافا 2، ثم هذه السلسلة سيساعد على جعل هذا الانتقال سلسة قدر الإمكان. أثناء الترقية إلى إصدار أحدث من مكتبة قد لا يبدو مثل صفقة كبيرة، 2 ركسجافا ليس التحديث النموذجي الخاص بك — إعادة كتابة كاملة من ركسجافا. مع تغير الكثير من السهل الحصول على الخلط، حيث أخذ بعض الوقت للتعرف على نفسك مع 2 ركسجافا من منظور مبتدئاً يمكن أن يوفر لك الكثير من الوقت والإحباط في الأجل الطويل.
في هذا المنصب الأول، سوف تكون تغطي ما ركسجافا والفوائد الرئيسية ويوفر المطورين الروبوت. سوف نتخذ أيضا نظرة متعمقة في العناصر الأساسية لأي مشروع ركسجافا: Observers
و Observables
والاشتراكات. بنهاية هذا البرنامج التعليمي، سوف يكون إنشاء بسيطة "مرحبا عالم"-أسلوب التطبيق الذي يحتوي على كافة هذه المكونات الأساسية.
هي لبنات البناء الرئيسية الأخرى من ركسجافا المشغلين، وحتى في الجزء الثاني أنا سوف يتم استكشاف طرق مختلفة يمكنك استخدام عوامل التشغيل لتحويل، والجمع بين، تصفية ومعالجة البيانات للتطبيق الخاص بك.
في الدفعة الأخيرة، سنقوم بالانتقال من المكتبة ركسجافا الأساسية ونلقي نظرة على ركساندرويد، مكتبة بأكملها التي هي معبأة مع كافة الملحقات الخاصة بالروبوت سوف تحتاج إلى إطلاق العنان للكامل إمكانات البرمجة التفاعلية للروبوت.
لدينا الكثير لتغطية، لذلك دعونا نبدأ مع الأساسيات:
ما هو ركسجافا، على أية حال؟
ركسجافا هي مكتبة التي تمكنك من إنشاء تطبيقات في نمط البرمجة التفاعلية. في جوهرها، تتيح البرمجة التفاعلية وسيلة نظيفة وفعالة للمعالجة ورد فعل لتيارات البيانات في الوقت الحقيقي، بما في ذلك البيانات مع قيم ديناميكية.
هذه البيانات والجداول لا يتعين بالضرورة أن تأخذ الشكل أنواع البيانات التقليدية، كما يعامل ركسجافا إلى حد كبير كل شيء كدفق بيانات — كل شيء من المتغيرات لخصائص ومخابئ، وحتى أحداث الإدخال المستخدم مثل نقرات والضربات الشديدة.
يمكن أن تكون البيانات المنبعثة من كل تيار أما قيمة أو خطأ أو إشارة "مكتمل"، وعلى الرغم من أن لم يكن لديك بالضرورة لتنفيذ آخر اثنين. بمجرد إنشاء تيارات لبث البيانات الخاصة بك، يمكنك الجمع بينها وبين الأجسام المتفاعلة التي تستهلك وثم التصرف في هذه البيانات، القيام بإجراءات مختلفة اعتماداً على ما قد تنبعث الدفق. RxJava يتضمن مجموعة كاملة من عوامل مفيدة للعمل مع الجداول، مما يجعل من السهل للقيام بأشياء مثل تصفية ورسم الخرائط، وتأخير، والعد، وأكثر بكثير.



لإنشاء سير العمل هذا لدفق البيانات والكائنات التي تتفاعل معها ، يمتد RxJava نمط تصميم برنامج Observer
. أساسا ، في RxJava لديك الكائنات التي يمكن رصدها التي تنبعث منها دفق البيانات ثم إنهاء ، وكائنات Observer
التي تشترك في Observables
. يتلقى Observer
إشعارًا في كل مرة يرسل فيها Observable
المعين له قيمة ، أو خطأ ، أو إشارة مكتملة.
حتى على مستوى عال جداً، ركسجافا كل شيء:
- إنشاء
Observable
. - مما يمكن
Observable
أن بعض البيانات الإرسال. - إنشاء
Observer
. - تعيين
Observer
إلىObservable
. - وتولى مهام
Observer
القيام كلما كان يتلقى انبعاثات منObservable
المعينة لها.
لماذا RxJava؟
تعلم أي تكنولوجيا جديدة يتطلب وقتاً وجهدا، وركسجافا كمكتبة المنحى البيانات، ليست دائماً API أسهل الحصول على السيطرة على.
لمساعدتك في تحديد ما إذا كان التعلم ركسجافا يستحق الاستثمار الأولى، دعنا نستكشف بعض الفوائد الرئيسية لإضافة مكتبة ركسجافا لمشاريع الروبوت الخاص بك.
رمز أكثر إيجازاً، للقراءة
التعليمات البرمجية التي معقدة ومطولة وصعوبة في القراءة هو دائماً الأخبار السيئة. رمز فوضوي أكثر عرضه للأخطاء وأوجه القصور الأخرى، وفي حالة حدوث أي أخطاء ثم كنت وقت أكثر مشقة في تعقب مصدر هذه الأخطاء إذا التعليمات البرمجية الخاصة بك في حالة من فوضى.
حتى إذا كان بناء المشروع الخاص بك دون أية أخطاء، التعليمات البرمجية المعقدة لا يزال يمكن أن يعود إلى تطارد لكم — عادة عندما تقرر الإفراج عن تحديث للتطبيق الخاص بك بضعة أشهر أسفل الخط، الحذاء المشروع الخاص بك، ونواجه فورا بجدار من متشابكة ، الخلط بين التعليمات البرمجية!
تبسط RxJava الشفرة المطلوبة للتعامل مع البيانات والأحداث عن طريق السماح لك بوصف ما تريد تحقيقه ، بدلاً من كتابة قائمة من التعليمات لتطبيقك للعمل من خلالها. يوفر RxJava أيضًا سير عملًا قياسيًا يمكنك استخدامه للتعامل مع جميع البيانات والأحداث عبر التطبيق - قم بإنشاء Observable
، أنشئ Observer
، عيّن الملاحظة التي يمكن ملاحظتها إلى ذلك المراقب ، وشطفها وتكرارها. يجعل هذا النهج رسمي للتعليمات البرمجية واضحة جداً، ويمكن قراءته بواسطة الإنسان.
تعدد العمليات بسهولة
تطبيقات الروبوت الحديث بحاجة إلى أن تكون قادرة على إنجاز العديد من المهام. على الأقل، سوف يتوقع المستخدمون أن تكون قادرة على مواصلة التفاعل مع واجهة المستخدم للتطبيق الخاص بك أثناء تنفيذ التطبيق الخاص بك بعض العمل في الخلفية، مثل إدارة اتصال شبكة اتصال أو تحميل ملف الموسيقى. المشكلة أن الروبوت مؤشر ترابط واحد بشكل افتراضي، حتى إذا كان التطبيق الخاص بك من أي وقت مضى أن متعددة المهام بنجاح ثم سوف تحتاج إلى إنشاء بعض المواضيع الإضافية.
من خارج منطقة الجزاء، الروبوت يوفر عددا من الطرق لإنشاء مؤشرات ترابط إضافية، مثل الخدمات و IntentServices
، ولكن أيا من هذه الحلول سهلة خاصة لتنفيذ، وأنها يمكن أن ينتج بسرعة التعليمات البرمجية المعقدة، والمطول الذي عرضه للأخطاء.
ركسجافا يهدف إلى اتخاذ الأم الخروج من إنشاء تطبيقات الروبوت متعددة مؤشرات الترابط، بتوفير المنظمون الخاصة والمشغلين. تعطيك هذه طريقة سهلة لتحديد مؤشر الترابط حيث يجب أن يتم تنفيذ العمل والخيط حيث ينبغي أن يتم نشر نتائج هذا العمل. ركسجافا 2.0 يتضمن عددا من المنظمون بشكل افتراضي، بما في ذلك Schedulers.newThread
، ومفيدة بشكل خاص كما أنه يقوم بإنشاء مؤشر ترابط جديد.
لتغيير مؤشر ترابط حيث يتم تنفيذ العمل، تحتاج فقط تغيير حيث تؤيد مراقب إلى مراقب، استخدام عامل التشغيل subscribeOn
. على سبيل المثال، هنا نحن تقوم بإنشاء جديد الموضوع وتحديد أنه يجب إنجازه العمل على هذا الموضوع الجديد:
observable.subscribeOn(Schedulers.newThread())
آخر مشكلة طال أمدها مع تعدد العمليات على الروبوت هو أنه يمكنك فقط تحديث واجهة المستخدم للتطبيق الخاص بك من مؤشر الترابط الرئيسي. بشكل عام، كلما كنت في حاجة إلى نشر نتائج بعض الأعمال الأساسية لواجهة المستخدم للتطبيق الخاص بك، لديك لإنشاء معالج Handler
.
مرة أخرى، قد ركسجافا إلى حل أكثر وضوحاً. يمكنك استخدام عامل التشغيل observeOn
لتحديد أن ملاحظ أن ترسل إخطارات استخدام جدولة مختلفة، مما يسمح لك بإرسال البيانات الخاصة بك يمكن ملاحظتها في الموضوع من اختيارك، بما في ذلك مؤشر ترابط UI الرئيسي أساسا.
وهذا يعني أن مع اثنين فقط الأسطر من التعليمات البرمجية، يمكنك إنشاء مؤشر ترابط جديد وإرسال النتائج للعمل المنجز في هذا الموضوع للروبوت في مؤشر ترابط UI الرئيسي:
.subscribeOn(Schedulers.newThread()) .observeOn(AndroidSchedulers.mainThread())
حسنا، حتى من الناحية التقنية نحن كنت الغش قليلاً هنا، كما AndroidSchedulers.mainThread
متوفرة فقط كجزء من مكتبة ركساندرويد، ونحن لن ننظر حتى الجزء الثالث. ومع ذلك، هذا المثال أعطيك لمحة إلى السلطة ركسجافا وركساندرويد لتبسيط مجالاً لتطوير الروبوت المعروف ليجري معقدة أكثر من اللازم.
زيادة المرونة
مشاهدات تنبعث منها البيانات الخاصة بهم بطريقة تخفي تماما بالطريقة التي تم إنشاؤها من البيانات. إذ لا أستطيع أن أرى الخاص بك المراقبين حتى الطريقة التي تم بها إنشاء البيانات، وأنت حر لتنفيذ الخاص بك Observable
في أي بالطريقة التي تريدها.
وبمجرد قيامك بتنفيذ Observable
، توفر RxJava مجموعة كبيرة من المشغلين يمكنك استخدامها لتصفية ودمج وتحويل البيانات التي يتم إرسالها من خلال هذه Observable
. يمكنك أيضًا تجميع المزيد والمزيد من عوامل التشغيل معًا حتى تقوم بإنشاء تدفق البيانات تمامًا لاحتياجات التطبيق الخاصة بك.
على سبيل المثال، يمكن دمج البيانات من مصادر متعددة، وتصفية تيار المدمجة حديثا، وثم استخدام البيانات الناتجة كالمدخلات لدفق بيانات لاحقة. وتذكر أنه في ركسجافا كل شيء إلى حد كبير هو تعامل كدفق بيانات، حتى يمكنك حتى تطبيق هذه العوامل على غير التقليدية "البيانات"، مثل الأحداث انقر فوق.
إنشاء تطبيقات أكثر استجابة
لقد ولت الأيام عندما تطبيق يمكن أن تفلت من تحميل صفحة من المحتوى وثم تنتظر قيام المستخدم بالنقر فوق الزر التالي. اليوم، يحتاج التطبيق المحمول النمطية الخاصة بك لتكون قادرة على الاستجابة لمجموعة متنوعة ومتزايدة من الأحداث والبيانات، من الناحية المثالية في الوقت الحقيقي. على سبيل المثال، يحتاج التطبيق الخاص بك الشبكات الاجتماعية النمطية يكون الاستماع باستمرار لأمثال واردة وتعليقات وطلبات صديق، بينما إدارة اتصال شبكة اتصال في الخلفية والاستجابة فورا كلما صنابير المستخدم أو الضربات الشديدة الشاشة.
مكتبة ركسجافا صممت لتكون قادرة على إدارة مجموعة واسعة من البيانات والأحداث في وقت واحد وفي الوقت الحقيقي، وجعلها أداة قوية لخلق نوع التطبيقات عالية الاستجابة التي تتوقع مستخدمي الهواتف المتحركة الحديثة.
إضافة ركسجافا إلى استوديو الروبوت
إذا كنت قد قررت أن ركسجافا لديها ما تقدمه ممارسة التنمية الروبوت الخاص بك، ثم هو الخطوة الأولى لتصبح درجة ماجستير ركسجافا إضافة المكتبة إلى المشروع الخاص بك.
إنشاء مشروع جديد "استوديو الروبوت" مع الإعدادات التي تختارها، ثم فتح ملف build.gradle مستوى الوحدة النمطية الخاصة بك وإضافة أحدث إصدار من io.reactivex.rxjava2:rxjava
كتبعية.
في وقت كتابة هذا التقرير، كان ركسجافا 2.0.5 أحدث من الإصدار، حتى ملف build.gradle الخاص بي يبدو مثل هذا:
dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) compile 'com.android.support:appcompat-v7:25.1.0' testCompile 'junit:junit:4.12' compile 'io.reactivex.rxjava2:rxjava:2.0.5' }
عند مطالبتك، انقر فوق Sync now.
المقبل، فتح ملف MainActivity
الخاص بك وإضافة الواردات سوف تحتاج لبدء العمل مع ميزات ركسجافا الأساسية:
import io.reactivex.Observable; import io.reactivex.ObservableEmitter; import io.reactivex.ObservableOnSubscribe; import io.reactivex.Observer; import io.reactivex.disposables.Disposable;
إذا كنت تقوم بترحيل من 1 ركسجافا، ثم هذه الواردات قد لا يكون ما تتوقع، كما استخدمت 1 ركسجافا اسم حزمة مختلفة تماما (rx
على وجه الدقة).
ومع ذلك، وهذا ليس بتغيير اسم تعسفي: أسماء مجموعة مختلفة تعطيك الخيار لاستخدام ركسجافا 1 و 2 ركسجافا جنبا إلى جنب في نفس المشروع. إذا كنت في منتصف الطريق من خلال مشروع يستخدم 1 ركسجافا، ثم يمكنك إضافة مكتبة ركسجافا 2 والبدء باستخدام ميزات 2 تحديث فورا، دون كسر أي من التعليمات البرمجية الخاصة بك ركسجافا 1.
إذا كنت تبدأ رحلة ركسجافا الخاص بك مع الإصدار 2، ثم فقط أن ندرك أن إذا واجهتك أية دروس ركسجافا أو التعليمات البرمجية باستخدام اسم الحزمة rx
، ثم هذا هو رمز ركسجافا 1 ومن غير المحتمل أن تكون متوافقة مع المكتبة الإصدار 2.
لبنات ركسجافا
حتى الآن، لقد بحثنا فقط في ركسجافا على مستوى عال جداً. لقد حان الوقت للحصول على أكثر تحديداً وإلقاء نظرة متعمقة في اثنين من أهم العناصر التي سوف يصل محصول مرة طوال عملك ركسجافا: Observer
وObservable
.
بنهاية هذا القسم ، لن يكون لديك فهم قوي لهذه المكونات الأساسية فحسب ، بل ستقوم أيضًا بإنشاء تطبيق يعمل بشكل كامل يتكون من Observer
تقوم بتبث البيانات و Observable
الذي يتفاعل مع هذه الانبعاثات. .
إنشاء Observable
يشبه Observable
إلى Iterable
في ذلك ، في ضوء تسلسل ، سوف يتكرر خلال هذا التسلسل وينبعث منها كل عنصر ، على الرغم من أن Observables
عادة لا تبدأ في بث البيانات حتى يشترك Observer
بها.
في كل مرة يرسل Observable
عنصرًا ، فإنه يقوم بإخطار Observer
الخاص به باستخدام الأسلوب ()onNext
. بمجرد نقل Observable
كافة قيمه ، فإنه ينتهي عن طريق استدعاء إما:
-
onComplete
: يسمى إذا كانت العملية ناجحة. -
onError
: دعا إذا تم طرحException
.
دعونا ننظر على سبيل مثال. هنا، نحن تقوم بإنشاء ملاحظ أن تنبعث من الأرقام 1، 2، 3 و 4 ومن ثم إنهاء.
Observable<Integer> observable = Observable.create(new ObservableOnSubscribe<Integer>() { @Override public void subscribe(ObservableEmitter<Integer> e) throws Exception { //Use onNext to emit each item in the stream// e.onNext(1); e.onNext(2); e.onNext(3); e.onNext(4); //Once the Observable has emitted all items in the sequence, call onComplete// e.onComplete(); } } );
لاحظ أن في هذا المثال أنا أشعر بالتدقيق الإملائي بما يحدث بالضبط، حتى لا تدع مقدار التعليمات البرمجية التي وضعت قبالة لكم! هذا رمز أكثر بكثير مما سوف تستخدمها عادة لإنشاء Observable
في مشاريعك ركسجافا الحياة الحقيقية.
إنشاء مراقب
Observer
هي كائنات تقوم بتعيينها إلى Observable
، باستخدام ()subscribe
. بمجرد اشتراك Observer
في Observable
، سوف يتفاعل ذلك عندما يصدر Observer
أيًا مما يلي:
-
onNext
: يObservable
وقد تنبعث قيمة. -
onError
: حدث خطأ. -
onComplete
: يObservable
الانتهاء من انبعاث جميع القيم الخاصة به.
دعونا إنشاء Observer
تشارك لدينا 1، 2، 3، 4 يمكن Observable
. للمساعدة
في الحفاظ على الأشياء البسيطة، سيكون رد فعل هذا المراقب onNext
و onError
وonComplete
بطباعة رسالة إلى لوجكات مراقب Logcat Monitor:
Observer<Integer> observer = new Observer<Integer>() { @Override public void onSubscribe(Disposable d) { Log.e(TAG, "onSubscribe: "); } @Override public void onNext(Integer value) { Log.e(TAG, "onNext: " + value); } @Override public void onError(Throwable e) { Log.e(TAG, "onError: "); } @Override public void onComplete() { Log.e(TAG, "onComplete: All Done!"); } }; //Create our subscription// observable.subscribe(observer);
فتح Android Monitor لوجكات مراقبة بتحديد علامة التبويب "مراقبة الروبوت" من الجزء السفلي من الإطار "استوديو الروبوت" (حيث يتم وضع المؤشر في الصورة أدناه) ثم تحديد علامة التبويب Logcat.



لوضع هذه التعليمات البرمجية للاختبار، أما إرفاق جهاز الروبوت المادية لتطوير الجهاز الخاص بك أو تشغيل المشروع الخاص بك في المتناوب متوافقة. بمجرد التطبيق الخاص بك يظهر على الشاشة، يجب أن تشاهد البيانات المنبعثة من الخاص بك يمكن ملاحظتها.



إنشاء ملاحظ مع رمز أقل
على الرغم من مشروعنا هو انبعاث البيانات بنجاح، التعليمة البرمجية نحن نستخدم ليست بالضبط موجزة – لا سيما القانون نستخدمه لإنشاء لدينا يمكن Observable
.
والحمد لله، ركسجافا يوفر عددا من وسائل الراحة التي تسمح لك بإنشاء ملاحظ Observable
تعليمات برمجية أقل بكثير:
1-Observable.just()
يمكنك استخدام عامل التشغيل.()just
لتحويل أي كائن إلى Observable
. والنتيجة يمكن Observable
ثم تنبعث منها الكائن الأصلي وإكمال.
على سبيل المثال، هنا نحن كنت تنشئ Observable
سوف تنبعث منها سلسلة واحدة لجميع Observers
:
Observable<String> observable = Observable.just("Hello World!");
2-()Observable.from
مشغل ()from.
يسمح لك بتحويل مجموعة من كائنات دفق يمكن ملاحظتها. يمكنك تحويل صفيف إلى Observable
باستخدام Observable.fromArray
، كالابل
إلى Observable
باستخدام Observable.fromCallable
، وإيتيرابل
إلى ملاحظ
باستخدام Observable.fromIterable
.
3-()Observable.range
يمكنك استخدام عامل التشغيل ()range.
تنبعث منها مجموعة متسلسلة من الإعداد الصحيحة. العدد الصحيح الأول قمت بتوفير قيمة أولية، والثاني هو عدد الإعداد الصحيحة التي تريد أن تنبعث منها. على سبيل المثال:
Observable<Integer> observable = Observable.range(0, 5);
4-()Observable.interval
يقوم عامل التشغيل هذا Observable
أن تنبعث تسلسل لا حصر له من ترتيب تصاعدي الإعداد الصحيحة، مع كل الانبعاثات مفصولة بفاصل زمني يختاره لك. على سبيل المثال:
Observable<Long> observable = Observable.interval(1, TimeUnit.SECONDS)
5-()Observable.empty
يقوم المشغل ()empty
ملاحظ أن تنبعث أي عناصر ولكن Observable
عادة، التي يمكن أن تكون مفيدة عندما تحتاج إلى سرعة إنشاء Observable
لأغراض الاختبار.
Observable<String> observable = Observable.empty();
الاستنتاج
في هذه المقالة، نحن تغطية لبنات البناء الأساسية ركسجافا.
في هذه المرحلة ، أنت تعرف كيفية إنشاء والعمل مع Observers
و Observables
، وكيفية إنشاء اشتراك بحيث يمكن لـ Observables
بدء إرسال البيانات. نظرنا بإيجاز أيضًا إلى عدد قليل من المشغلين الذين يسمحون لك بإنشاء مجموعة من Observables
المختلفة ، باستخدام رمز أقل بكثير.
ومع ذلك، مشغلي ليست مجرد وسيلة مفيدة لخفض مقدار التعليمات البرمجية التي تحتاج إلى كتابة! إنشاء Observer
وObservables
بسيط جداً، ولكن عوامل التشغيل بحيث تبدأ حقاً أن نرى ما هو ممكن مع ركسجافا.
حتى في ما بعد المقبل، سوف نستكشف بعض مشغلي أقوى في ركسجافا، بما في ذلك العوامل التي يمكن أخيرا تجعل خيوط متعددة على الروبوت تجربة خالية من الألم. لا تنزعج لمعرفة القوة الحقيقية للمكتبة ركسجافا.
وفي الوقت نفسه، تحقق في بعض الوظائف الأخرى ودورات دراسية حول تطوير الروبوت هنا في Envato Tuts +!
- Android Studioترميز تطبيقات الروبوت الوظيفية في كوتلين: الشروع في العملجيسيكا ثورنسبي
- Androidالترميز تطبيق الروبوت مع رفرفة ودارتهاثيبيلاجال أشرف
- Android SDKما هو الجديد في قاعدة؟ التحديثات من قمة ديف Firebaseكيكي مجبيمينا
- Androidترحيل تطبيق الروبوت إلى التصميم الماديهاثيبيلاجال أشرف
رسومات تخطيطية لتدفق البيانات يمكن ملاحظتها من الوثائق ريكتيفيكس، وهي المرخص لها بموجب "الإبداعي العزو 3.0 رخصة".