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总共有四种线程模式,分别是:

扫描二维码关注公众号,回复: 9076981 查看本文章

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

发布了277 篇原创文章 · 获赞 84 · 访问量 38万+

猜你喜欢

转载自blog.csdn.net/qq_26296197/article/details/85485394