多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內(nèi)最全I(xiàn)T社區(qū)平臺 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁 > php開源 > 綜合技術(shù) > EventBus的使用(基于EventBus3.0,開發(fā)必備)

EventBus的使用(基于EventBus3.0,開發(fā)必備)

來源:程序員人生   發(fā)布時間:2016-06-07 17:38:27 閱讀次數(shù):2536次

EventBus3的使用(基于EventBus3.0事件總線,開發(fā)必備)

              很久沒有寫博客了,之前工作太忙了,好了,這次給大家?guī)鞟ndroid開發(fā)中使用非常普遍,非常重要的開源框架EventBus(別名:事件總線);

這是1個github上面非常出名的開源項目,地址:點擊打開鏈接查看EventBus

            下面是官方介紹,這里我先截個圖,然后詳解:

            

上面這個圖就介紹了eventBus的大概情況,我這里大致翻1下:

              EventBus是對Android發(fā)布/定閱事件總線的優(yōu)化。

 

            這個圖非常直觀的告知了我們EventBus的原理,其實就是發(fā)布者發(fā)送1個事件,這個事件通過事件總線找到對應(yīng)的事件接受者,接受者接遭到了事件后就可以立即履行1些相應(yīng)的操作(后面會給出1個詳細(xì)使用的demo);

          事件總線...

             1、簡化了組件之間的通訊

                         1.1  將事件發(fā)布者和接受者解耦

                         1.2  在Activities, Fragments, and 后臺線程之間履行的非常好(也非常好用)

                         1.3  避免了復(fù)雜的和容易出錯的依賴性和生命周期問題

             2、使你的代碼簡單(的確,非常簡單,基本就1句話弄定)

             3、運行得非常快(確切)

             4、非常小(jar包最多50k)

             5、在app中已被使用了上億次(這么多人在使用,你還沒有用,就out了...) 

             6、具有先進(jìn)的功能,如交付線程,用戶優(yōu)先級等。   

             

好了,上面簡單介紹了EventBus,那末接下來就教大家怎樣使用了


            豫備工作:在你的項目中的app那個Gradle中最后面的dependencies中添加EventBus,以下:

compile 'org.greenrobot:eventbus:3.0.0'

         只需要 3 步就可以完成使用:

        1、定義事件:

/** * 定義事件 */ public class MessageEvent { public final String message; public MessageEvent(String message){ this.message = message; } }

       2、準(zhǔn)備事件接受者(需要處理事件的方法)

          事件接收者,Android, Activities and Fragments需要在他們的生命周期中進(jìn)行注冊和注銷事件,只有注冊了才能收到事件。范例代碼以下:

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //注冊事件 EventBus.getDefault().register(this); }

@Override protected void onDestroy() { //注銷事件 EventBus.getDefault().unregister(this); super.onDestroy(); }
        這樣當(dāng)這個activity處于后臺時,也能及時的更新界面上的顯示數(shù)據(jù)。

      然后注冊了以后,就需要1個方法來接收事件總線上面的事件了,請注意,EventBus 3方法名可以選擇自由(沒有EventBus 2這樣的命名約定)。方法名前面還必須要有@Subscribe注釋才行,示例代碼以下:

//當(dāng)1個事件被發(fā)送出來時,這個方法將被調(diào)用(主要使用這個方法) @Subscribe public void onMessageEvent(MessageEvent event){ Toast.makeText(getActivity(), event.message, Toast.LENGTH_SHORT).show(); }

//當(dāng)1個其他事件被發(fā)送出來出來時,這個方法將被調(diào)用(這個方法暫時還沒有發(fā)現(xiàn)怎樣用) @Subscribe public void handleSomethingElse(SomeOtherEvent event){ doSomethingWith(event); }
      3、在其他activity、fragment或后臺線程發(fā)送事件,所有當(dāng)前注冊過接受者匹配事件的類型,將被接遭到,發(fā)送事件的代碼以下:
EventBus.getDefault().post(new MessageEvent("Hello everyone!"));
        
        好了,到這里,就把EventBus3.0的基本使用方法介紹完了,那末有人可能有疑問了:怎樣沒有1個demo呢,不試1下怎樣有說服力呢?
 好,接下來我就使用1個demo來介紹EventBus的使用方法;

       1、首先,我使用2個activity來演示EventBus,F(xiàn)irstActivity是事件接收者,SecondActivity是事件的發(fā)送者;
定義的事件以下:
package com.chengguo.eventbus; /** * 定義事件 * Created by seven on 2016/5/29. */ public class MessageEvent { public final String message; public MessageEvent(String message){ this.message = message; } }

      2、給FirstActivity注冊事件總線,并處理事件,這里就是,當(dāng)有匹配的事件時,顯示Toast 并將消息更新到TextView中。

    
<pre class="java" name="code">package com.chengguo.eventbus; import android.content.Intent; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.TextView; import android.widget.Toast; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; public class FirstActivity extends AppCompatActivity { private TextView mMessageText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //注冊事件 EventBus.getDefault().register(this); setContentView(R.layout.first_activity); mMessageText = (TextView) findViewById(R.id.text_message); findViewById(R.id.btn_next).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { startActivity(new Intent(FirstActivity.this,SecondActivity.class)); } }); } /** * 事件接受方法 * @param event */ @Subscribe public void onMessageEvent(MessageEvent event){ Toast.makeText(FirstActivity.this, event.message, Toast.LENGTH_SHORT).show(); mMessageText.setText(event.message); } @Override protected void onDestroy() { //注銷事件 EventBus.getDefault().unregister(this); super.onDestroy(); } }


         3、SecondActivity發(fā)送消息,測試FirstActivity處于后臺時,是不是能夠接遭到消息,并處理數(shù)據(jù)。

package com.chengguo.eventbus; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import org.greenrobot.eventbus.EventBus; public class SecondActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.second_activity); findViewById(R.id.btn_next).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { EventBus.getDefault().post(new MessageEvent("您好!成功了!")); } }); } }


測試的gif圖以下(成功了):


       通過上面1個小小的測試,我們知道了怎樣使用EventBus,但是有些人就會問了,我們項目中到底有甚么好處呢?

使用處景是:當(dāng)你要設(shè)置你的昵稱或頭像時,這個時候你從設(shè)置界面回到個人中心界面時,比如個人中心要顯示你的昵稱和頭像,這個時候,如果你使用生命周期的onRestart()方法或onResume()方法來實時更新你的數(shù)據(jù),但是這樣就會使得你的app會出現(xiàn)卡頓之類的(實際開發(fā)經(jīng)驗),還有可能造成內(nèi)存泄漏之類的。這個時候使用EventBus就非常方便,而且流程度非常好。還有人說了,使用接口不1樣能夠?qū)崿F(xiàn)嗎,但是EventBus為我們節(jié)省和很多代碼,這不是很好嗎。總之,強烈建議你在你的項目中使用它,由于它真的會使你開發(fā)非常方便。




生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學(xué)習(xí)有所幫助,可以手機掃描二維碼進(jìn)行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 最新99国产成人精品视频免费 | 天堂亚洲国产日韩在线看 | 欧美一级毛片美99毛片 | 国产欧美日韩综合精品一区二区 | xxxxxx欧美| 亚欧美综合 | 国产亚洲成归v人片在线观看 | 亚洲黄色中文字幕 | 亚洲国产成人久久综合一 | 在线观看v片 | 免费在线黄色网址 | 无码精品一区二区三区免费视频 | 亚洲春色另类 | 国产一级一片 | 午夜视频在线观看免费观看在线观看 | 免费黄网站大全 | 毛片免费网址 | 国产大象视频一区二区 | 波多野结衣久久 | 亚洲国产成人综合 | 日产日韩亚洲欧美综合搜索 | 亚洲一区二区三区久久久久 | 日韩a级一片 | 伊甸园久久网站 | 欧美 亚洲 激情 | 波多野结衣中文字幕在线视频 | 成人在激情在线视频 | 一区二区三区四区国产精品 | 亚洲精品乱码久久久久久 | 亚洲国产欧美国产第一区二区三区 | 精品伊人久久久大香线蕉欧美 | 国产精品久久久久久福利漫画 | 亚洲国产精品一区二区三区久久 | 极品色αv影院 | 亚洲第一网站 | 国产免费叼嘿网站免费 | 国产一区二区三区 | 久久精品视频一区二区三区 | 国精品日韩欧美一区二区三区 | 最新日本免费一区二区三区中文 | 自怕偷自怕亚洲精品 |