هل يقوم التحديث التحديثي بإجراء مكالمات الشبكة على الخيط الرئيسي؟

StackOverflow https://stackoverflow.com//questions/21006807

  •  21-12-2019
  •  | 
  •  

سؤال

أحاول استكشاف Retrofit+OkHttp على Android.إليك بعض التعليمات البرمجية التي وجدتها عبر الإنترنت:

RestAdapter restAdapter = new RestAdapter.Builder().setExecutors(executor, executor)
.setClient(new OkClient(okHttpClient))
.setServer("blah").toString())
.build();

إذا لم أستخدم خدمة المنفذ، فهل سيتم تشغيل الكود الخاص بي على الموضوع الرئيسي؟هل يجب علي تقديم طلبات ويب في موضوع جديد من هنا؟

هل كانت مفيدة؟

المحلول

الطريقة التي ترجع قيمة لا تتمام بطريقة متزامنة.

giveacodicetagpre.

للقيام بذلك غير متزامن كل ما تحتاجه هو إضافة رد اتصال.

giveacodicetagpre.

نأمل أن يساعد هذا.

التحيات!

نصائح أخرى

يمكن الإعلان عن طرق التعديل التحديثي إما للتنفيذ المتزامن أو غير المتزامن.

سيتم تنفيذ الطريقة ذات نوع الإرجاع بشكل متزامن.

@GET("/user/{id}/photo")
Photo getUserPhoto(@Path("id") int id);

يتطلب التنفيذ غير المتزامن أن تكون المعلمة الأخيرة للطريقة هي a Callback.

@GET("/user/{id}/photo")
void getUserPhoto(@Path("id") int id, Callback<Photo> cb);

على نظام Android، سيتم تنفيذ عمليات الاسترجاعات على الموضوع الرئيسي.بالنسبة لتطبيقات سطح المكتب، ستحدث عمليات الاسترجاعات على نفس مؤشر الترابط الذي نفذ طلب HTTP.

يدمج التعديل التحديثي أيضًا RxJava لدعم الأساليب بنوع الإرجاع rx.Observable

@GET("/user/{id}/photo")
Observable<Photo> getUserPhoto(@Path("id") int id);

يتم الاشتراك في الطلبات القابلة للملاحظة بشكل غير متزامن ويتم ملاحظتها على نفس مؤشر الترابط الذي نفذ طلب HTTP.للمراقبة على موضوع مختلف (على سبيل المثال.الموضوع الرئيسي لنظام Android) مكالمة observeOn(Scheduler) على عاد Observable.

ملحوظة:يعتبر تكامل RxJava تجريبيًا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top