جستجو برای:
سبد خرید 0
  • خانه
  • دوره های آموزشی
    • دوره های حضوری و آنلاین
      • دوره جامع برنامه نویسی اندروید
      • دوره جامع برنامه نویسی فلاتر
      • دوره برنامه نویسی React Native
      • دوره آموزشی برنامه نویسی iOS
    • دوره های متخصص و حرفه ای
      • دوره متخصص اندروید (پروژه محور)
      • دوره متخصص فلاتر (پروژه محور)
      • دوره آموزش امنیت در اندروید
      • دوره درآمدزایی دلاری از گوگل پلی در ایران
  • آموزش رایگان
    • دوره رایگان اندروید
    • دوره رایگان فلاتر
  • مشاورهجدید
  • دوره VIP
  • وبلاگ
ورود
گذرواژه خود را فراموش کرده اید؟
عضویت

اطلاعات شخصی شما برای پردازش سفارش شما استفاده می‌شود، و پشتیبانی از تجربه شما در این وبسایت، و برای اهداف دیگری که در سیاست حفظ حریم خصوصی توضیح داده شده است.

ارسال مجدد کد یکبار مصرف (00:60)
  • 02171058559
  • info@amooznegar.com
  • لیست علاقه مندی ها
آکادمی آموزنگار
  • خانه
  • دوره های آموزشی
    • دوره های حضوری و آنلاین
      • دوره جامع برنامه نویسی اندروید
      • دوره جامع برنامه نویسی فلاتر
      • دوره برنامه نویسی React Native
      • دوره آموزشی برنامه نویسی iOS
    • دوره های متخصص و حرفه ای
      • دوره متخصص اندروید (پروژه محور)
      • دوره متخصص فلاتر (پروژه محور)
      • دوره آموزش امنیت در اندروید
      • دوره درآمدزایی دلاری از گوگل پلی در ایران
  • آموزش رایگان
    • دوره رایگان اندروید
    • دوره رایگان فلاتر
  • مشاورهجدید
  • دوره VIP
  • وبلاگ
شروع کنید
آخرین اطلاعیه ها
لطفا برای نمایش اطلاعیه ها وارد شوید
0

وبلاگ

آکادمی آموزنگار > اخبار > برنامه نویسی > اندروید > کتابخانه EventBus در اندروید

کتابخانه EventBus در اندروید

1398-12-08
ارسال شده توسط آموزنگار
اندروید
کتابخانه EventBus در اندروید

EventBus  یک کتابخانه open-source برای اندروید و جاوا میباشد که بر پایه ی publisher/subscriber است .این کتابخانه یک ارتباط مرکزی ایجاد میکند که به وسیله آن میتوان ارتباط بین Activity ها و Fragment ها را خیلی ساده تر و راحتر حتی بدون ایجاد تداخلی برقرار کرد و با نوشتن چند خط کد ساده وابستگی را از بین میبرد و سرعت برنامه را نیز افزایش می دهد.

کتابخانه EventBus در اندروید

هدف استفاده از EventBus

به طور مثال اگر بخواهیم یک داده ایی از یک Activity به چند Activity و یا چند Fragment ارسال کنیم از این کتابخانه استفاده میکنیم یعنی یک داده توسط Publisher به یک اکتیویتی Post می شود و داده توسط Subscriber  در یک یا چند Activity و یا  Fragment دریافت و تنظیم می شود و مثل این می ماند که داده ای اصلا جابه جا نشده است.

مزایای استفاده از کتابخانه EventBus

  • ارتباط بین component را ساده میکند.
  • فرستنده و گیرنده را از هم جدا می کند.
  • با Activity ، Fragmentو background threads عملکرد عالی دارد.
  • از وابستگی پیچیده و مستعد خطا و مشکلات مربوط life cycle جلوگیری می کند.
  • سریع است به طور خاص برای عملکرد بالا بهینه شده است.
  • کتابخانه ی خیلی کم حجمی است(~60k jar)
  • تا کنون در حدود 1میلیون نصب فعال داشته است.
  • ویژگی های پیشرفته ای مانند delivery threads وsubscriber priorities  و… را دارا می باشد.

متد های کاربردی کتابخانه EventBus

خب در ابتدا می خواهیم متدهای این کتابخانه رو بهتون معرفی کنم تا بیشتر باهاش آشنا شیم:

Register  :به منظور ثبت یک رویداد استفاده قرار می گیرد

EventBus.getDefault().register(this);

un-register : به منظور برداشتن یک رویداد ثبت شده از EventBus استفاده می شود.

1EventBus.getDefault().unregister(this);

Post : برای ارسال داده یا متد مورد نظر در هر جای برنامه استفاده میشود و Activity/Frgmentهای که متد subscriber داشته باشن میتوانند اون داده رو دریافت کنند

EventBus.getDefault().post(eventName);

@subscriber : به منظور دریافت یک رویداد استفاده میشود

@Subscribe(threadMode = ThreadMode.MAIN)  
public void onMessageEvent(Events.EventName event) {/* Do something */};

توضیحات تکمیلی کتابخانه EventBus

آموزش ساخت برنامه چت با Firebase Cloud Messaging
خواندن این مقاله
قدرت گرفته از افزونه نوشته‌های مرتبط هوشمند

خب همونطوری که گفتم یک قسمت publisher  (قسمتی که از متد post باید استفاده کرد و داده را ارسال کرد) و یک قسمت subscriber (قسمتی که داده post شده رو میشه دریافت کرد) داریم.

هر وقت با متد post در یک Activity/Fragment داده ارسال شود تمای Activity/Fragmentهایی که  متد subscriber  دارند به آن داده ارسال شده دسترسی دارند (اگه بخوام راحت تر بگم یک داده یا متد رو همه جای پروژتون میتونید بهش دسترسی داشته باشید فقط کافیه ابتدا اونو post کنید و سپس تو Activity/Fragmentهای مقصد با متد subscriber  بگیریمش J)

نکته مهم : در قسمت گیرنده(Subscriber) حتما باید متد های  register و un-register  را بنویسیم چون متد subscriber  نیاز به این دو متد برای انجام کار دارد .اگه این کارو نکنید هیچ وقت به داده های ارسالی دست پیدا نمیکنید.

پیاده سازی کتابخانه EventBus در اندروید استودیو

باید همانند دیگر کتابخانه ها dependency  آن را به فایل gradle  پروژه اضافه کنیم.

  1. به فایل gradle(Module:app) و در قسمت dependencies خط زیر را اضافه میکنیم
implementation 'org.greenrobot:eventbus:3.2.0'

2.یک کلاس برای Event خود می نویسیم

public static class MessageEvent { /* Additional fields if needed */ }

3.با استفاده از متد post ،Event خود را ارسال میکنیم

EventBus.getDefault().post(new MessageEvent());

4.با استفاده از متد subscriber ،Event ارسالی از متد post را در گیرنده می گیریم

@Subscribe(threadMode = ThreadMode.MAIN)  
public void onMessageEvent(MessageEvent event) {/* Do something */};

براساس life cycle قسمتی که هستیم منظور Activity/Fragment گیرنده است در قسمت onStart آن باید متد register و در قسمت onStop باید متد un-register را به شکل زیر بنویسیم.

@Override
public void onStart() {
    super.onStart();
    EventBus.getDefault().register(this);
}
  
@Override
public void onStop() {
    EventBus.getDefault().unregister(this);
    super.onStop();
}

و تمام ،خیلی ساده بود مگه نه !

scareface

خب حالا که فهمیدیم باید چیکار بکنیم بریم ی مثال ساده باهم بزنیم
قراره که با کلیک بر روی یک Button در Activity یک مقدارString (رشته) و یک مقدار int به یک Fragment بفرستیم و اون داده مورد نطرمونو تو یک Toast نمایشش بدیم
خب اولین کار ساخت کلاس است برای ساده شدن کار من یک کلاس Encapsolation می سازم چون می خوام تو این مدلم داده پاس بدم

public class MessageEvent {
    private String name;
    private int age;
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public int getAge() {
        return age;
    }
 
    public void setAge(int age) {
        this.age = age;
    }
}

خب به سراغ Activity مبدا برای post کردن مقدار داده خود می رویم
برای دسترسی به متدهای داخل کلاس از آن object می سازیم وobject خود را مقدار دهی و سپس مقدار آن را post می کنیم.دقت کنید کد زیر را در قسمت onclick دکمه مورد دلخواه خود در Activity می نویسیم

MessageEvent event=new MessageEvent();
event.setName("SharYar");
event.setAge(25);
EventBus.getDefault().post(event);

حال به قسمت گیرنده می رویم مقصد ما به طور دلخواه یک Fragment است.
متد subscriber را برای گرفتن مقادیرمان می نویسیم

@Subscribe(threadMode = ThreadMode.MAIN)
public void onMessageEvent(MessageEvent event) {
    Toast.makeText(getActivity(), event.getName()+" is "+event.getAge()+" years old.", Toast.LENGTH_SHORT).show();
}

یادمان نرود در سمت گیرنده حتما باید متد subscriber را register و un-register کنیم پس

@Override
public void onStart() {
    EventBus.getDefault().register(this);
    super.onStart();
 
}
 
@Override
public void onStop() {
    EventBus.getDefault().register(this);
    super.onStop();
 
}

خب کار تمام است پروژه خود را Run می کنیم میبینم که با زدن دکمه یک Toast حاوی
SharYar is 25 years old.
نمایش داده می شود.

آیا کامپیوتر من برای اجرای اندروید استودیو مناسب است یا خیر؟
خواندن این مقاله
قدرت گرفته از افزونه نوشته‌های مرتبط هوشمند
قبلی 11 فریمورک برتر توسعه اپلیکیشن های موبایل برای سال 2024
بعدی Flutter چیست ؟ همه چی در مورد فلاتر

دیدگاهتان را بنویسید لغو پاسخ

جستجو برای:
دسته‌ها
  • GoLang
  • jetpack compose
  • PHP
  • اپلیکیشن
  • امنیت
  • اندروید
  • اوپن سورس
  • برنامه نویسی
  • برنامه نویسی iOS
  • برنامه نویسی react native
  • پادکست صوتی
  • تکنولوژی
  • جاوا
  • طراح رابط کاربری
  • طراحی رابط کاربری
  • طراحی وب
  • عمومی
  • فریلنسر
  • فلاتر
  • فناوری
  • کاتلین
  • کتاب های آموزشی
  • کسب و کار
  • هوش مصنوعی
  • وردپرس
برچسب‌ها
admob coroutine dagger dagger-hilt jetpack nft rxandroid rxjava spring swift ارز دیجیتال امنیت در اندروید دارت فایربیس فوشیا مصاحبه کاری معماری mvi نقشه راه برنامه نویسی کاتلین گوگل

آکادمی آموزنگار، جایی برای آغاز یک سفر شگفت‌انگیز در دنیای برنامه‌نویسی است. آموزنگار تلاش می‌کند تا هر فردی را از هر سطحی از زندگی و تجربه به دنیای جذاب برنامه‌نویسی وارد کند.

دسترسی سریع
  • درباره ما
  • تماس با ما
  • حریم خصوصی
  • سوالات متداول
نمادها
شبکه های اجتماعی
Facebook Twitter Youtube icon--white Whatsapp

تهران، ازگل ، مجتمع تجاری الماس ایرانیان، پارک علم و فناوری فردا

021-71058559

تمامی حقوق برای آکادمی آموزنگار محفوظ می باشد

اشتراک گذاری در شبکه های اجتماعی
ارسال به ایمیل
https://amooznegar.com/?p=10708
ورود
استفاده از شماره تلفن
استفاده از آدرس ایمیل
آیا هنوز عضو نشده اید؟ ثبت نام کنید
بازیابی رمز عبور
استفاده از شماره تلفن
استفاده از آدرس ایمیل
ثبت نام
استفاده از شماره تلفن
استفاده از ایمیل
قبلا عضو شده اید؟ ورود به سیستم
محافظت توسط   
مرورگر شما از HTML5 پشتیبانی نمی کند.

سوالی دارید؟ از ما بپرسید، کارشناسان ما در اسرع وقت با شما تماس می گیرند.

آموزنگار

آکادمی آموزنگار

  • 021-71058559
  • شنبه تا چهارشنبه از ساعت 8 تا 17
  • info@amooznegar.com