EventBusの使用とメッセージの受信の4つのモードの紹介
2088 ワード
EventBusを使って長い間、ずっとEventBusに関するブログを書いていません.自分は普段使っていますが、細かいことを忘れていることが多いので、今日はブログを書くのが便利です.この内容を見ると、既製のEventBusの使用項目があるほうがいいです.そうしないと、見ても眉目がありません.一、EventBusの使用1.メッセージを受け取るクラスでEventBusを登録します.EventBus.getDefault().register(this);
2.メモリの漏洩や忘れを防ぐため、このクラスのOnDestory()メソッドでEventBusをデポジットします.@Override protected void onDestroy(){super.onDestroy();//最後にEventBus.getDefault().unregister(this);}
3.送信メッセージクラス作成に使用するクラスを作成し、属性を宣言し、メソッドとgetsetメソッドを作成します.public class FirstEvent {
}
4.送信メッセージクラスでメッセージを送信
5.リスニングを登録し、メッセージを受け取り、public void onEventMainThread(FirstEvent event){
二、EventBusの4つのモードはEventBus 3にある.0では,@Subscribe(threadMode=ThreadMode.MAIN)という方式で購読する.1.ThreadMode.MAINは、この方法がメインスレッド実行において、現在UIスレッドである場合、直接呼び出されると判断することを示す.そうでなければenqueue(subscription, event);現在のメソッドをキューに追加し、handlerを介してメッセージを直接送信し、handlerのhandleMessageでメソッドを実行します.はっきり言ってHandlerでメッセージを送信して実行します.2.ThreadMode.BACKGROUNDは,この方法はバックグラウンドで実行され,同時処理ができないことを示す.現在UIスレッドでない場合は、直接呼び出します.UIスレッドの場合、タスクはバックグラウンドのキューに追加され、最終的にEventbusのスレッドプールによって呼び出されます.
executorService = Executors.newCachedThreadPool();. 3.ThreadMode.ASYNCは,この方法がバックグラウンドで実行され,非同期処理が可能であることを示した.タスクをバックグラウンドのキューに追加し、最終的にEventbusのスレッドプールによって呼び出されます.スレッドプールはBackgroundThreadと同じです.
そういえばBackgroundThreadとAsyncの違いは何ですか?
BackgroundThreadのタスクは、次から次へと呼び出され、ブール型変数handlerActiveによる制御が使用されます.Asyncは同時制御を動的に制御します.
4.ThreadMode.POSYINGは、この方法がメッセージ送信者と同じスレッドで実行されることを示す
参考資料:http://blog.csdn.net/lmj623565791/article/details/40920453
2.メモリの漏洩や忘れを防ぐため、このクラスのOnDestory()メソッドでEventBusをデポジットします.@Override protected void onDestroy(){super.onDestroy();//最後にEventBus.getDefault().unregister(this);}
3.送信メッセージクラス作成に使用するクラスを作成し、属性を宣言し、メソッドとgetsetメソッドを作成します.public class FirstEvent {
private String mMsg;
/*
*/
public FirstEvent(String mMsg) {
this.mMsg = mMsg;
}
public String getmMsg() {
return mMsg;
}
}
4.送信メッセージクラスでメッセージを送信
btn_second.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
EventBus.getDefault().post(new FirstEvent(" "));
}
});
5.リスニングを登録し、メッセージを受け取り、public void onEventMainThread(FirstEvent event){
String msg = "onEventMainThread "+event.getmMsg();
tv_text.setText(msg);
Toast.makeText(MainActivity.this, "mag"+msg, Toast.LENGTH_SHORT).show();
}
二、EventBusの4つのモードはEventBus 3にある.0では,@Subscribe(threadMode=ThreadMode.MAIN)という方式で購読する.1.ThreadMode.MAINは、この方法がメインスレッド実行において、現在UIスレッドである場合、直接呼び出されると判断することを示す.そうでなければenqueue(subscription, event);現在のメソッドをキューに追加し、handlerを介してメッセージを直接送信し、handlerのhandleMessageでメソッドを実行します.はっきり言ってHandlerでメッセージを送信して実行します.2.ThreadMode.BACKGROUNDは,この方法はバックグラウンドで実行され,同時処理ができないことを示す.現在UIスレッドでない場合は、直接呼び出します.UIスレッドの場合、タスクはバックグラウンドのキューに追加され、最終的にEventbusのスレッドプールによって呼び出されます.
executorService = Executors.newCachedThreadPool();. 3.ThreadMode.ASYNCは,この方法がバックグラウンドで実行され,非同期処理が可能であることを示した.タスクをバックグラウンドのキューに追加し、最終的にEventbusのスレッドプールによって呼び出されます.スレッドプールはBackgroundThreadと同じです.
そういえばBackgroundThreadとAsyncの違いは何ですか?
BackgroundThreadのタスクは、次から次へと呼び出され、ブール型変数handlerActiveによる制御が使用されます.Asyncは同時制御を動的に制御します.
4.ThreadMode.POSYINGは、この方法がメッセージ送信者と同じスレッドで実行されることを示す
参考資料:http://blog.csdn.net/lmj623565791/article/details/40920453