Android EventBus 源码分析

01.EventBus注册源码解析

1.1 EventBus.getDefault()获取对象

  • 先看源码,单例模式,使用了双重判断的方式,防止并发的问题,还能极大的提高效率

阅读更多

Android EventBus 基础用法

01.EventBus简介

  • 1.1 EventBus的三要素
    • Event:事件
      可以是任意类型的对象。
    • Subscriber:事件订阅者
      在EventBus3.0之前,消息处理的方法只能限定于onEvent、onEventMainThread、onEventBackgroundThread和onEventAsync,他们分别代表四种线程模型。
      在EventBus3.0之后,事件处理的方法可以随便取名,但是需要添加一个注解@Subscribe,并且要指定线程模型(默认为POSTING),四种线程模型下面会讲到。
阅读更多

Android Gson基础使用

1.基本使用

1.1 Gson对象创建

  • 1.1.1 直接通过new来创建对象
1
2
3
4
//通过构造函数来获取
Gson gson = new Gson();
//通过 GsonBuilder 来获取,可以进行多项特殊配置
Gson gson = new GsonBuilder().create();
阅读更多

Android Glide 对象池

01.对象池Pools优化频繁创建和销毁类

  • 优化点

    • 对开销较大的 Bitmap 进行了复用,就连为了复用Bitmap时重复申请的Key对象都进行了复用,尽可能的减少了对象的创建开销,保证了应用的流畅性。
  • 对象池作用

    • 在某些时候,我们需要频繁使用一些临时对象,如果每次使用的时候都申请新的资源,很有可能会引发频繁的 gc 而影响应用的流畅性。这个时候如果对象有明确的生命周期,那么就可以通过定义一个对象池来高效的完成复用对象。
阅读更多

Android Glide 源码分析

01.一般图片加载过程

1.1 加载图片场景

  • 在使用App的时候,会经常需要加载一些网络图片,一般的操作步骤大概是这样的:
    • 第一步从网络加载图片:一般都是通过网络拉取的方式去服务器端获取到图片的文件流后,再通过BitmapFactory.decodeStream(InputStreamin)来加载图片Bitmap。
阅读更多

Android Glide基础介绍

01.平时基础使用

  • 常用api如下所示
    • thumbnail(float sizeMultiplier)——请求给定系数的缩略图。如果缩略图比全尺寸图先加载完,就显示缩略图,否则就不显示。系数sizeMultiplier必须在(0,1)之间,可以递归调用该方法。
    • sizeMultiplier(float sizeMultiplier)——在加载资源之前给Target大小设置系数。
    • diskCacheStrategy(DiskCacheStrategy strategy)——设置缓存策略。默认采用DiskCacheStrategy.RESULT策略,对于download only操作要使用DiskCacheStrategy.SOURCE。
阅读更多

Android Rx 源码分析

01.observable创建过程

  • 看下创建被观察者(Observable)的过程,直接使用Observable.create()来创建Observable,看下源码

    • 首先对创建的对象source进行非空判断,创建一个ObservableCreate对象出来,然后把自定义的ObservableOnSubscribe作为参数传到ObservableCreate中去,最后就是调用 RxJavaPlugins.onAssembly()方法。
阅读更多

Android Rx 实际应用

01.最普通的案例分析

  • 如下所示,指定线程控制后简单的调用。

    • 第一种方式
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    MovieModel model = MovieModel.getInstance();
    Disposable subscribe = model.getHomePage()
    //线程控制(也称为调度 / 切换),即讲解功能性操作符中的:subscribeOn() & observeOn()
    //功能性操作符subscribeOn() & observeOn()作用
    //线程控制,即指定 被观察者 (Observable) / 观察者(Observer) 的工作线程类型
    // 1. 指定被观察者 生产事件的线程
    .subscribeOn(Schedulers.io())
    // 2. 指定观察者 接收 & 响应事件的线程
    .observeOn(AndroidSchedulers.mainThread())
    // 3. 最后再通过订阅(subscribe)连接观察者和被观察者
    .subscribe(new Consumer<MovieBean>() {
    @Override
    public void accept(MovieBean movieBean) throws Exception {
    LogUtils.e(TAG+"----"+"accept(MovieBean movieBean)");
    if (movieBean != null && movieBean.getRet() != null) {
    mView.setAdapterData(movieBean);
    }
    }
    }, new Consumer<Throwable>() {
    @Override
    public void accept(Throwable throwable) throws Exception {
    LogUtils.e(TAG+"----"+"accept(Throwable throwable)");
    }
    }, new Action() {
    @Override
    public void run() throws Exception {
    LogUtils.e(TAG+"----"+"run()");
    }
    }, new Consumer<Disposable>() {
    @Override
    public void accept(Disposable disposable) throws Exception {
    LogUtils.e(TAG+"----"+"accept(Disposable disposable)");
    }
    });
    mSubscriptions.add(subscribe);
阅读更多

Android 选择合适路由

01.选择那个开源路由库

  • 比较有代表性的组件化开源框架有得到得到DDComponentForAndroid、阿里Arouter、聚美Router 等等。
    • 得到DDComponentForAndroid:一套完整有效的android组件化方案,支持组件的组件完全隔离、单独调试、集成调试、组件交互、UI跳转、动态加载卸载等功能。
    • 阿里Arouter:对页面、服务提供路由功能的中间件,简单且够用好用,网上的使用介绍博客也很多,在该组件化案例中,我就是使用这个。
阅读更多