Eventbus: ๊ณ ์ • ์ด๋ฒคํŠธ๊ฐ€ ์—ฌ๋Ÿฌ ๋ฒˆ ์ˆ˜์‹ ๋จ

์— ๋งŒ๋“  2013๋…„ 11์›” 25์ผ  ยท  3์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: greenrobot/EventBus

๊ณ ์ • ์ด๋ฒคํŠธ๋กœ ์ž‘์—…ํ•  ๋•Œ ์ด๋ฒคํŠธ๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ์ˆ˜์‹ ํ•œ ๊ฒƒ์„ ์•Œ์•˜์Šต๋‹ˆ๋‹ค. ์ด๋ฒคํŠธ ๋“ฑ๋ก๊ณผ ๊ฒŒ์‹œ๊ฐ€ ๋™์‹œ์— ์ด๋ฃจ์–ด์ง€๋Š” ๊ฒฝ์šฐ์˜€์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ๋ฅผ ๋น ๋ฅด๊ฒŒ ์‚ดํŽด๋ณด์•˜์Šต๋‹ˆ๋‹ค. postSticky ๋ฉ”์†Œ๋“œ์—์„œ ๋‚˜๋Š”stickyEvents๋ฅผ ๋„ฃ์€ ํ›„ ์ฆ‰์‹œstickyEvents ๊ฐ์ฒด์— ๋Œ€ํ•œ ์ž ๊ธˆ์ด ํ•ด์ œ๋œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•„์ฐจ๋ ธ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์ด๋ฒคํŠธ๊ฐ€ ํ˜„์žฌ ๋ฆฌ์Šค๋„ˆ์— ๊ฒŒ์‹œ๋ฉ๋‹ˆ๋‹ค.
๋“ฑ๋ก์„ ์œ„ํ•ด ๋ฆฌ์Šค๋„ˆ๋Š” ๋จผ์ € ์ด๋ฒคํŠธ๋ฅผ ์ˆ˜์‹ ํ•˜๋„๋ก ๋“ฑ๋ก๋œ ํ›„ ๊ณ ์ • ์ด๋ฒคํŠธ๋ฅผ ๊ฐ€์ ธ์˜ค๋ ค๊ณ  ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค. ์Šคํ‹ฐํ‚ค ์ด๋ฒคํŠธ๋ฅผ ๋ฐ›์œผ๋ฉด ์ด๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋ฆฌ์Šค๋„ˆ๊ฐ€ ์ด๋ฒคํŠธ๋ฅผ ๋‘ ๋ฒˆ ๋ฐ›์„ ์ˆ˜ ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

  1. ๋ฆฌ์Šค๋„ˆ๊ฐ€ ์ด๋ฏธ ๋“ฑ๋ก๋˜์–ด ์žˆ๊ณ  postSticky๊ฐ€ ์ด๋ฒคํŠธ๋ฅผ ๋ฆฌ์Šค๋„ˆ์— ๊ฒŒ์‹œํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฒซ ๋ฒˆ์งธ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
  2. ๋‘ ๋ฒˆ์งธ ์ด๋ฒคํŠธ๋Š” ๋“ฑ๋กํ•˜๋Š” ๋™์•ˆ postSticky์— ์˜ํ•ด ๋ฐฐ์น˜๋œ ์Šคํ‹ฐ์ปค ์ด๋ฒคํŠธ๊ฐ€ ์ด๋ฏธ ๋ฐœ๊ฒฌ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
need to investigate

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

removeStickyEvent๋กœ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
EventBus.getDefault().removeStickyEvent(NotifyToJoinEvent.class);

๋ชจ๋“  3 ๋Œ“๊ธ€

๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์…จ๋‚˜์š”?

ํ€ตํ”ฝ์Šค๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. EventBus ํด๋ž˜์Šค์—์„œ registerSticky(Object), registerSticky(Object, int), postSticky(Object) ๋ฉ”์„œ๋“œ๋ฅผ ์˜ค๋ฒ„๋กœ๋“œํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์œ„์—์„œ ์„ค๋ช…ํ•œ ๊ฒฝ์Ÿ ์กฐ๊ฑด์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ๋™๊ธฐํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋น ๋ฅธ ์ˆ˜์ •์ด์—ˆ๊ณ  ๋” ๋‚˜์€ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํŒจ์น˜๋ฅผ ๋ณด๋‚ด์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

public class EventBusWithStickyFix extends EventBus {

<strong i="8">@Override</strong>
public synchronized void registerSticky(Object subscriber) {
    super.registerSticky(subscriber);
}

<strong i="9">@Override</strong>
public synchronized void registerSticky(Object subscriber, int priority) {
    super.registerSticky(subscriber, priority);
}

<strong i="10">@Override</strong>
public synchronized void postSticky(Object event) {
    super.postSticky(event);
}

}

removeStickyEvent๋กœ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
EventBus.getDefault().removeStickyEvent(NotifyToJoinEvent.class);

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰

๊ด€๋ จ ๋ฌธ์ œ

ANewAnonymous picture ANewAnonymous  ยท  4์ฝ”๋ฉ˜ํŠธ

fmweigl picture fmweigl  ยท  13์ฝ”๋ฉ˜ํŠธ

~
Liam6666 picture Liam6666  ยท  5์ฝ”๋ฉ˜ํŠธ

oky2abbas picture oky2abbas  ยท  6์ฝ”๋ฉ˜ํŠธ

lordcodes picture lordcodes  ยท  3์ฝ”๋ฉ˜ํŠธ