要点:如果不是必须, 用系统控件
线程切换需要注意的地方
RxJava 内置的线程调度器的确可以让我们的线程切换得心应手,但其中也有些需要注意的地方。
subscribeOn()
指定的就是发射事件的线程,observerOn()
指定的就是订阅者接收事件的线程。subscribeOn()
只有第一次的有效,其余的会被忽略。observerOn()
,下游的线程就会切换一次。RxJava 中,已经内置了很多线程选项供我们选择,例如有:
Schedulers.io()
代表io操作的线程, 通常用于网络,读写文件等 IO 密集型的操作;Schedulers.computation()
代表CPU计算密集型的操作, 例如需要大量计算的操作;Schedulers.newThread()
代表一个常规的新线程;AndroidSchedulers.mainThread():运行在应用程序的主线程。 AndroidSchedulers.from(Looper looper):运行在该looper对应的线程当中。
不要打破链式调用!一个极低成本的 RxJava 全局 Error 处理方案 - 掘金 https://juejin.im/post/5be7bb9f6fb9a049f069c706
EventBus 是一款针对 Android 优化的发布-订阅事件总线。它简化了应用程序内各组件间、组件与后台线程间的通信。其优点是开销小,代码更优雅,以及将发送者和接收者解耦。如果 Activity 和 Activity 进行交互还好说,但如果 Fragment 和 Fragment 进行交互则着实令人头疼。这时我们会使用广播来处理,但是使用广播略嫌麻烦并且效率也不高。如果传递的数据是实体类,需要序列化,那么传递的成本会有点高。
使用 EventBus 在讲到 EventBus 的基本用法之前,我们需要了解EventBus的三要素以及它的4种 ThreadMode。EventBus 的三要素如下。
EventBus 的 4种 ThreadMode(线程模型)如下。
This project is deprecated in favor of RxJava and RxAndroid. These projects permit the same event-driven programming model as Otto, but they’re more capable and offer better control of threading.
If you’re looking for guidance on migrating from Otto to Rx, this post is a good start.
Dagger2 注解 开篇我们就提到Dagger2是基于Java注解来实现依赖注入的,那么在正式使用之前我们需要先了解下Dagger2中的注解。Dagger2使用过程中我们通常接触到的注解主要包括:@Inject, @Module, @Provides, @Component, @Qulifier, @Scope, @Singleten。
google/dagger: A fast dependency injector for Android and Java. https://github.com/google/dagger
private final Listener<String> mListener;
@Override protected void deliverResponse(String response) { mListener.onResponse(response); }
// 应该对服务器响应的数据进行解析
@Override
protected Response<String> parseNetworkResponse(NetworkResponse response) {
String parsed;
try {
parsed = new String(response.data, HttpHeaderParser.parseCharset(response.headers));
} catch (UnsupportedEncodingException e) {
parsed = new String(response.data);
}
return Response.success(parsed, HttpHeaderParser.parseCacheHeaders(response));
}
···