最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android之利用EventBus發(fā)送消息傳遞示例

 更新時間:2017年02月09日 14:28:50   作者:啟艦  
本篇文章主要介紹了Android之利用EventBus進行消息傳遞示例。EventBus是一款針對Android優(yōu)化的發(fā)布/訂閱事件總線,非常具有實用價值,需要的朋友可以參考下。

一、概述

EventBus是一款針對Android優(yōu)化的發(fā)布/訂閱事件總線。主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,線程之間傳遞消息.優(yōu)點是開銷小,代碼更優(yōu)雅。以及將發(fā)送者和接收者解耦。

1、下載EventBus的類庫

源碼:EventBus_jb51.rar

2、基本使用

(1)自定義一個類,可以是空類,比如:

public class AnyEventType { 
  public AnyEventType(){} 
 } 

(2)在要接收消息的頁面注冊:

eventBus.register(this); 

(3)發(fā)送消息

eventBus.post(new AnyEventType event); 

(4)接受消息的頁面實現(xiàn)(共有四個函數(shù),各功能不同,這是其中之一,可以選擇性的實現(xiàn),這里先實現(xiàn)一個):

public void onEvent(AnyEventType event) {} 

 (5)解除注冊

eventBus.unregister(this); 

順序就是這么個順序,可真正讓自己寫,估計還是云里霧里的,下面舉個例子來說明下。

首先,在EventBus中,獲取實例的方法一般是采用EventBus.getInstance()來獲取默認的EventBus實例,當(dāng)然你也可以new一個又一個,個人感覺還是用默認的比較好,以防出錯。

二、實戰(zhàn)

先給大家看個例子:

當(dāng)擊btn_try按鈕的時候,跳到第二個Activity,當(dāng)點擊第二個activity上面的First Event按鈕的時候向第一個Activity發(fā)送消息,當(dāng)?shù)谝粋€Activity收到消息后,一方面將消息Toast顯示,一方面放入textView中顯示。

按照下面的步驟,下面來建這個工程:

1、基本框架搭建

想必大家從一個Activity跳轉(zhuǎn)到第二個Activity的程序應(yīng)該都會寫,這里先稍稍把兩個Activity跳轉(zhuǎn)的代碼建起來。后面再添加EventBus相關(guān)的玩意。

MainActivity布局(activity_main.xml)

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
 xmlns:tools="http://schemas.android.com/tools" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 android:orientation="vertical"> 
  
 <Button 
  android:id="@+id/btn_try" 
  android:layout_width="match_parent" 
  android:layout_height="wrap_content" 
  android:text="btn_bty"/> 
 <TextView 
  android:id="@+id/tv" 
  android:layout_width="wrap_content" 
  android:layout_height="match_parent"/> 
 
</LinearLayout> 

新建一個Activity,SecondActivity布局(activity_second.xml)

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
 xmlns:tools="http://schemas.android.com/tools" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 android:orientation="vertical" 
 tools:context="com.harvic.try_eventbus_1.SecondActivity" > 
 
 <Button 
  android:id="@+id/btn_first_event" 
  android:layout_width="match_parent" 
  android:layout_height="wrap_content" 
  android:text="First Event"/> 
 
</LinearLayout> 

MainActivity.java (點擊btn跳轉(zhuǎn)到第二個Activity)

public class MainActivity extends Activity { 
 
 Button btn; 
 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
  super.onCreate(savedInstanceState); 
  setContentView(R.layout.activity_main); 
 
  btn = (Button) findViewById(R.id.btn_try); 
 
  btn.setOnClickListener(new View.OnClickListener() { 
 
   @Override 
   public void onClick(View v) { 
    // TODO Auto-generated method stub 
    Intent intent = new Intent(getApplicationContext(), 
      SecondActivity.class); 
    startActivity(intent); 
   } 
  }); 
 } 
 
} 

到這,基本框架就搭完了,下面開始按步驟使用EventBus了。

2、新建一個類FirstEvent

package com.harvic.other; 
 
public class FirstEvent { 
 
 private String mMsg; 
 public FirstEvent(String msg) { 
  // TODO Auto-generated constructor stub 
  mMsg = msg; 
 } 
 public String getMsg(){ 
  return mMsg; 
 } 
} 

這個類很簡單,構(gòu)造時傳進去一個字符串,然后可以通過getMsg()獲取出來。

3、在要接收消息的頁面注冊EventBus:

在上面的GIF圖片的演示中,大家也可以看到,我們是要在MainActivity中接收發(fā)過來的消息的,所以我們在MainActivity中注冊消息。

通過我們會在OnCreate()函數(shù)中注冊EventBus,在OnDestroy()函數(shù)中反注冊。所以整體的注冊與反注冊的代碼如下:

package com.example.tryeventbus_simple; 
 
import com.harvic.other.FirstEvent; 
 
import de.greenrobot.event.EventBus; 
import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.widget.Button; 
import android.widget.TextView; 
import android.widget.Toast; 
 
public class MainActivity extends Activity { 
 
 Button btn; 
 TextView tv; 
 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
  super.onCreate(savedInstanceState); 
  setContentView(R.layout.activity_main); 
    //注冊EventBus 
  EventBus.getDefault().register(this); 
 
  btn = (Button) findViewById(R.id.btn_try); 
  tv = (TextView)findViewById(R.id.tv); 
 
  btn.setOnClickListener(new View.OnClickListener() { 
 
   @Override 
   public void onClick(View v) { 
    // TODO Auto-generated method stub 
    Intent intent = new Intent(getApplicationContext(), 
      SecondActivity.class); 
    startActivity(intent); 
   } 
  }); 
 } 
 @Override 
 protected void onDestroy(){ 
  super.onDestroy(); 
  EventBus.getDefault().unregister(this);//反注冊EventBus 
 } 
} 

4、發(fā)送消息

發(fā)送消息是使用EventBus中的Post方法來實現(xiàn)發(fā)送的,發(fā)送過去的是我們新建的類的實例!

EventBus.getDefault().post(new FirstEvent("FirstEvent btn clicked")); 

完整的SecondActivity.Java的代碼如下:

package com.example.tryeventbus_simple; 
 
import com.harvic.other.FirstEvent; 
 
import de.greenrobot.event.EventBus; 
import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
 
public class SecondActivity extends Activity { 
 private Button btn_FirstEvent; 
 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
  super.onCreate(savedInstanceState); 
  setContentView(R.layout.activity_second); 
  btn_FirstEvent = (Button) findViewById(R.id.btn_first_event); 
 
  btn_FirstEvent.setOnClickListener(new View.OnClickListener() { 
 
   @Override 
   public void onClick(View v) { 
    // TODO Auto-generated method stub 
    EventBus.getDefault().post( 
      new FirstEvent("FirstEvent btn clicked")); 
   } 
  }); 
 } 
} 

5、接收消息

接收消息時,我們使用EventBus中最常用的onEventMainThread()函數(shù)來接收消息,具體為什么用這個,我們下篇再講,這里先給大家一個初步認識,要先能把EventBus用起來先。

在MainActivity中重寫onEventMainThread(FirstEvent event),參數(shù)就是我們自己定義的類:

在收到Event實例后,我們將其中攜帶的消息取出,一方面Toast出去,一方面?zhèn)鞯絋extView中;

public void onEventMainThread(FirstEvent event) { 
 
 String msg = "onEventMainThread收到了消息:" + event.getMsg(); 
 Log.d("harvic", msg); 
 tv.setText(msg); 
 Toast.makeText(this, msg, Toast.LENGTH_LONG).show(); 
} 

完整的MainActiviy代碼如下:

package com.example.tryeventbus_simple; 
 
import com.harvic.other.FirstEvent; 
 
import de.greenrobot.event.EventBus; 
import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.widget.Button; 
import android.widget.TextView; 
import android.widget.Toast; 
 
public class MainActivity extends Activity { 
 
 Button btn; 
 TextView tv; 
 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
  super.onCreate(savedInstanceState); 
  setContentView(R.layout.activity_main); 
 
  EventBus.getDefault().register(this); 
 
  btn = (Button) findViewById(R.id.btn_try); 
  tv = (TextView)findViewById(R.id.tv); 
 
  btn.setOnClickListener(new View.OnClickListener() { 
 
   @Override 
   public void onClick(View v) { 
    // TODO Auto-generated method stub 
    Intent intent = new Intent(getApplicationContext(), 
      SecondActivity.class); 
    startActivity(intent); 
   } 
  }); 
 } 
 
 public void onEventMainThread(FirstEvent event) { 
 
  String msg = "onEventMainThread收到了消息:" + event.getMsg(); 
  Log.d("harvic", msg); 
  tv.setText(msg); 
  Toast.makeText(this, msg, Toast.LENGTH_LONG).show(); 
 } 
 
 @Override 
 protected void onDestroy(){ 
  super.onDestroy(); 
  EventBus.getDefault().unregister(this); 
 } 
} 

好了,到這,基本上算初步把EventBus用起來了,下篇再講講EventBus的幾個函數(shù),及各個函數(shù)間是如何識別當(dāng)前如何調(diào)用哪個函數(shù)的。

源碼地址:EventBus_jb51.rar

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • android canvas drawText()文字居中效果

    android canvas drawText()文字居中效果

    這篇文章主要為大家詳細介紹了android canvas drawText()文字居中效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • cocos2d-2.0-x-2.0.3 交叉編譯到android報錯解決

    cocos2d-2.0-x-2.0.3 交叉編譯到android報錯解決

    我用的是cocos2d-2.0-x-2.0.3 之前弄了一天也沒成功 今天來了下載了最新的ndk8 更新了sdk 又重新是了一遍 居然成功了,不知道是工具的版本問題還是哪一步出錯誤了,在這里詳細的整理一下,感興趣的朋友可以了解下
    2013-01-01
  • Android動態(tài)布局小結(jié)

    Android動態(tài)布局小結(jié)

    android動態(tài)布局相比靜態(tài)布局,動態(tài)布局不用再將xml轉(zhuǎn)變了布局代碼,提高了一定的效率,本篇文章給大家介紹android動態(tài)布局小結(jié),對android動態(tài)布局相關(guān)知識感興趣的朋友一起學(xué)習(xí)吧
    2016-01-01
  • Android 去掉自定義dialog的白色邊框的簡單方法

    Android 去掉自定義dialog的白色邊框的簡單方法

    這篇文章介紹了Android 去掉自定義dialog的白色邊框,有需要的朋友可以參考一下
    2013-09-09
  • android 九宮格滑動解鎖開機實例源碼學(xué)習(xí)

    android 九宮格滑動解鎖開機實例源碼學(xué)習(xí)

    開機密碼的樣式種類多種多樣,五花八門.本文接下來介紹滑動九宮格來達到開機目的,感興趣的朋友可以了解下
    2013-01-01
  • Android應(yīng)用開發(fā)中觸摸屏手勢識別的實現(xiàn)方法解析

    Android應(yīng)用開發(fā)中觸摸屏手勢識別的實現(xiàn)方法解析

    這篇文章主要介紹了Android應(yīng)用開發(fā)中觸摸屏手勢識別的實現(xiàn)方法解析,深入的部分則是對左右手勢的識別給出了相關(guān)編寫思路,需要的朋友可以參考下
    2016-02-02
  • android系統(tǒng)按鍵音framework流程源碼詳細解析

    android系統(tǒng)按鍵音framework流程源碼詳細解析

    這篇文章主要為大家詳細介紹了android系統(tǒng)按鍵音framework流程源碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • Flutter中http請求抓包的完美解決方案

    Flutter中http請求抓包的完美解決方案

    這篇文章主要給大家介紹了關(guān)于Flutter中http請求抓包的完美解決方案,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者使用Flutter具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • Android實現(xiàn)全局右滑返回

    Android實現(xiàn)全局右滑返回

    這篇文章主要為大家詳細介紹了Android實現(xiàn)全局右滑返回,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • Android wifi 調(diào)試詳解及簡單實例

    Android wifi 調(diào)試詳解及簡單實例

    這篇文章主要介紹了Android wifi 調(diào)試詳解及簡單實例的相關(guān)資料,需要的朋友可以參考下
    2017-02-02

最新評論

井冈山市| 东明县| 通山县| 曲周县| 乳源| 乐至县| 老河口市| 河北省| 巴中市| 普兰县| 剑阁县| 夏邑县| 常宁市| 高州市| 元江| 内丘县| 谷城县| 肥城市| 长葛市| 大名县| 桂平市| 太仆寺旗| 定远县| 达尔| 中山市| 聂拉木县| 嘉禾县| 横山县| 桃园市| 靖安县| 怀柔区| 始兴县| 娱乐| 许昌市| 洪洞县| 蓝山县| 日喀则市| 湖口县| 淳安县| 田林县| 三都|