## EventBus
EventBus能夠簡化各組件間的通信,讓我們的代碼書寫變得簡單,能有效的分離事件發送方和接收方(也就是解耦的意思),能避免復雜和容易出錯的依賴性和生命周期問題。
## 關于EventBus的概述
#### 三要素
1. Event 事件。它可以是任意類型。
2. Subscriber 事件訂閱者。在EventBus3.0之前我們必須定義以onEvent開頭的那幾個方法,分別是onEvent、onEventMainThread、onEventBackgroundThread和onEventAsync,而在3.0之后事件處理的方法名可以隨意取,不過需要加上注解@subscribe(),并且指定線程模型,默認是POSTING。
3. Publisher 事件的發布者。我們可以在任意線程里發布事件,一般情況下,使用EventBus.getDefault()就可以得到一個EventBus對象,然后再調用post(Object)方法即可。
#### 四種線程模型
EventBus3.0有四種線程模型,分別是:
1. POSTING (默認) 表示事件處理函數的線程跟發布事件的線程在同一個線程。
2. MAIN 表示事件處理函數的線程在主線程(UI)線程,因此在這里不能進行耗時操作。
3. BACKGROUND 表示事件處理函數的線程在后臺線程,因此不能進行UI操作。如果發布事件的線程是主線程(UI線程),那么事件處理函數將會開啟一個后臺線程,如果果發布事件的線程是在后臺線程,那么事件處理函數就使用該線程。
4. ASYNC 表示無論事件發布的線程是哪一個,事件處理函數始終會新建一個子線程運行,同樣不能進行UI操作。
我們發現EventBus使用起來是如此的方便,當我們的代碼量變得很多的時候,使用EventBus后你的邏輯非常的清晰,并且代碼之間高度解耦,在進行組件、頁面間通信的時候,EventBus是一個不錯的選擇。
- 空白目錄
- 自我介紹
- Android面試題
- Handler
- 網絡請求框架
- 圖片處理框架Picasso,Glide
- Android最佳性能實踐OOM
- 異步:RxJava,AsyncTask
- View,ViewGroup事件分發
- 消息傳遞:EventBus
- HTTPS和HTTP的區別
- 進程間通信的方式
- HttpClient與HttpUrlConnection的區別
- 性能優化
- Java多線程
- Fragment狀態保持和恢復
- 講解一下Context
- JNI
- java虛擬機和Dalvik虛擬機的區別
- 線程sleep和wait有什么區別
- 保存Activity狀態
- WebView與js交互(調用哪些API)
- 內存泄露檢測,內存性能優化
- 布局優化
- 自定義view和動畫
- 設計模式(單例,工廠,觀察者。作用,使用場景)
- String,Stringbuffer,Stringbuilder 區別
- 開源框架,為什么使用,與別的有什么區別
- Android大廠面試題
- 愛奇藝
- 小米
- 騰訊
- 阿里
- 今日頭條
- 共同問到的
- 其他問題
- 框架MVC、MVP、MVVM
- sleep和wait有什么區別
- React Native原理
- React Native面試題
- 數據結構
- Android開發
- 基礎知識
- Java基礎
- 數據結構
- 面向對象思想
- 設計模式
- 開發環境
- Android SDK
- Activity
- Service
- Broadcastreceiver
- Contentprovider
- ActionBar
- Fragment
- UI
- 通信
- 數據持久化
- 性能
- 調試
- 適配
- 測試
- 安全
- NDK
- 手機功能
- 第三方擴展
- 其他
- 2018 Java面試題
- Android(2017-2018)BAT面試題整理
- 2017下半年,一二線互聯網公司Android面試題匯總
- 2018阿里Android面試題
- 一面
- 二面
- 三面