dagger2 + RxJava +Retrofit 学习笔记

RxJava

异步操作库 观察者模式

优点 简洁

实现步骤:

1创建观察者Observer(Subscriber)////observer会被转换成subscriber; 区别subscriberti提供更多方法,如:onStart()  unsubscribe()

Observer observer=new Observer() {
    @Override
    public void onCompleted() {
    }
    @Override
    public void onError(Throwable e) {
    }
    @Override
    public void onNext(String s) {
        Toast.makeText(MainActivity.this,s,Toast.LENGTH_LONG).show();
    }};

2 创建被观察者 Observable

Observable observable=Observable.create(newObservable.OnSubscribe() {
    @Override
    public void call(Subscriber subscriber) {
        subscriber.onNext("helloRx");
   }});

还有just() from()来构建被观察者

3 订阅 Subscribe

       Observable.subscribe(observer);

 

4 线程控制 Scheduler(调度器)

1) Schedulers.immediate()  直接在当前线程运行,这是默认的

2) Schedulers.newThread()  总是启用新线程,并在新线程运行

3) Schedulesr.io() 操作(读写文件 数据库, 网络操作)相比newThread(),有更多的优化

4) Schedulers.computation() cpu密集型计算应当使用的线程

5) AndroidSchedurs.mainThread() 指的是操作将在UI线程执行

用subscribeOn() 和 observeOn()对线程控制

subscribeOn(): 事件产生的线程

observeOn()   事件消费的线程

 

5变换

1)    map()     一对一的转化

2)    flatMap()  一对多的转化

 

Retrofit

1 定义接口

public interfaceGitHubService {

    String ENDPOINT ="https://api.github.com";

 

    // 获取库, 获取的是数组

    @GET("/users/{user}/repos")

    ObservablegetRepoData(@Path("user") String user);

}

2

Retrofit retrofit = new Retrofit.Builder()

               .baseUrl(GitHubService.ENDPOINT)

               .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) // 添加Rx适配器

               .addConverterFactory(GsonConverterFactory.create()) // 添加Gson转换器

                .build();

3

GitHubService mGitHubService=retrofit.create(GitHubService.class);

 

4

mGitHubService.getRepoData("SpikeKing")

               .subscribeOn(Schedulers.newThread())

               .observeOn(AndroidSchedulers.mainThread())

                .subscribe(newObserver() {…});

 

Dagger 2(依赖注入框架)

@Inject 用途是注入。通常在需要的地方使用这个注解,换句话说,这个注解告诉dagger这个类或字段需要依赖注入。

@Module 注解Module类,这个类用来提供依赖。

@Provide 在module类中,我们定义的方法用这个来注解。方法名一般为provide+返回类型。(dagger在注入时调用该方法)

@Component 是连接@Inject和@Module的桥梁。用来注解的是接口,编译时dagger 用apt生成相应实现,名字一般为Dagger+类名。

@Scope dagger2通过自定义注解限定注解作用域。

@Qualifier 当类的类型不足以鉴别一个依赖时,我们用这个注解来标示。

一般使用

1) 写Module类

2) 写Component接口,接口有void inject() 。如void inject(MainActivitymainActivity);

3)   实现注入

@Inject//注入
MainPresenter mMainPresenter;

component=DaggerMainActivityComponent.builder()
        .mainActivityModule(new MainActivityModule(this))
        .build();  //初始化
component.inject(this);//应用

 

(除了用@Inject注入外,还可以调用component的方法获取依赖,但是要在Component的接口里,实现相应方法如OkHttpClient getOkHttpClient();然后可以通过调用component.getOkHttpClient();获取依赖 )

只有在获取依赖时才会调用Module的provide方法。初始化时并不会。

 

这三个框架是基友听说一起用会更好(dagger2 + RxJava +Retrofit)

 

 

退出应用的方式(按home后返回有bug)

1 设置第一个activity 的启动模式为singletask

2 重写这个activity 的onnewintent;方法内得到intent 并作相应判断 并finish 自己

3 在要退出的的地方 启动设置为第一个的activity;

你可能感兴趣的:(dagger2 + RxJava +Retrofit 学习笔记)