android常見傳值

EVENTBUS的使用
https://github.com/greenrobot/EventBus

EventBus in 3 steps
Define events:

public static class MessageEvent { /* Additional fields if needed */ }
Prepare subscribers: Declare and annotate your subscribing method, optionally specify a thread mode:

@Subscribe(threadMode = ThreadMode.MAIN)
public void onMessageEvent(MessageEvent event) {/* Do something */};
Register and unregister your subscriber. For example on Android, activities and fragments should usually register according to their life cycle:

@Override
public void onStart() {
super.onStart();
EventBus.getDefault().register(this);
}

@Override
public void onStop() {
super.onStop();
EventBus.getDefault().unregister(this);
}
Post events:

EventBus.getDefault().post(new MessageEvent());

注意點 註銷應該寫在onDestroy方法中,在onStart()方法中最好加入判斷是否之前已經註冊了事件

註冊事件中,幾個字段的含義

鏈接:https://www.jianshu.com/p/a040955194fc

在上面的例子中,我們再註解@Subscribe(threadMode = ThreadMode.MAIN)中使用了ThreadMode.MAIN這個模式,表示該函數在主線程即UI線程中執行,實際上EventBus總共有四種線程模式,分別是:

ThreadMode.MAIN:表示無論事件是在哪個線程發佈出來的,該事件訂閱方法onEvent都會在UI線程中執行,這個在Android中是非常有用的,因爲在Android中只能在UI線程中更新UI,所有在此模式下的方法是不能執行耗時操作的。
ThreadMode.POSTING:表示事件在哪個線程中發佈出來的,事件訂閱函數onEvent就會在這個線程中運行,也就是說發佈事件和接收事件在同一個線程。使用這個方法時,在onEvent方法中不能執行耗時操作,如果執行耗時操作容易導致事件分發延遲。
ThreadMode.BACKGROUND:表示如果事件在UI線程中發佈出來的,那麼訂閱函數onEvent就會在子線程中運行,如果事件本來就是在子線程中發佈出來的,那麼訂閱函數直接在該子線程中執行。
ThreadMode.AYSNC:使用這個模式的訂閱函數,那麼無論事件在哪個線程發佈,都會創建新的子線程來執行訂閱函數。

如果用第三和第四個字段,而且再這個方法內部更新主線程的話會報這樣的錯誤

  java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()

如果先發送後寫的註冊代碼,可以用粘性發送
EventBus.getDefault().postSticky(new MessageEvent(“goodEvening”));
意思是如果接受者沒有收到消息,則一直髮送到收到爲止

文件存儲工具類
https://blog.csdn.net/csdnzouqi/article/details/75333266

參考鏈接
https://www.jianshu.com/p/4340ea609ca1

源碼下載
https://download.csdn.net/download/qq_26296197/10888522

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章