Android EventBus 用法及源码解析

1.EventBus简介

1.1 EventBus的三要素

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

Android LruCache 和 DiskLruCache 源码分析

01.图片缓存策略

1.1 两级缓存

  • 现在主流的app中图片等资源的缓存策略一般是分两级,一个是内存级别的缓存,一个是磁盘级别的缓存。
  • 作为android系统的维护者google也开源了其缓存方案,LruCache和DiskLruCache。
    • 从android3.1开始LruCache已经作为android源码的一部分维护在android系统中,为了兼容以前的版本android的support-v4包也提供了LruCache的维护,如果App需要兼容到android3.1之前的版本就需要使用support-v4包中的LruCache,如果不需要兼容到android3.1则直接使用android源码中的LruCache即可。
阅读更多

Android Retrofit 源码分析

1.首先回顾Retrofit简单使用方法

  • Api接口

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public interface DouBookApi {
    /**
    * 根据tag获取图书
    * @param tag 搜索关键字
    * @param count 一次请求的数目 最多100
    * https://api.douban.com/v2/book/search?tag=文学&start=0&count=30
    */
    @GET("v2/book/search")
    Observable<DouBookBean> getBook(@Query("tag") String tag,
    @Query("start") int start,
    @Query("count") int count);
    }
阅读更多

Android RecyclerView 用法和源码深度解析

1.RecycleView的结构

  • 关于RecyclerView,大家都已经很熟悉了,用途十分广泛,大概结构如下所示

    • RecyclerView.Adapter - 处理数据集合并负责绑定视图
    • ViewHolder - 持有所有的用于绑定数据或者需要操作的View
    • LayoutManager - 负责摆放视图等相关操作
    • ItemDecoration - 负责绘制Item附近的分割线
阅读更多

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 状态管理优化

01.界面状态有哪些

  • 在Android中,不管是activity或者fragment,在加载视图的时候都有可能会出现多种不同的状态页面View。比如常见的就有这些:
    • 内容界面,也就是正常有数据页面
    • 加载数据中,加载loading
    • 加载数据错误,请求数据异常
    • 加载后没有数据,请求数据为空
    • 没有网络,网络异常
  • 同时,思考一下几个问题。
    • 怎样切换界面状态?有些界面想定制自定义状态?状态如何添加点击事件?下面就为解决这些问题!
阅读更多

Android 四种引用优化

01.软引用使用场景

  • 软引用使用场景

    • 正常是用来处理大图片这种占用内存大的情况

      • 代码如下所示
      1
      2
      3
      4
      5
      6
      7
      Bitmap bitmap = bitmaps.get(position);
      //正常是用来处理图片这种占用内存大的情况
      bitmapSoftReference = new SoftReference<>(bitmap);
      if(bitmapSoftReference.get() != null) {
      viewHolder.imageView.setImageBitmap(bitmapSoftReference.get());
      }
      //其实看glide底层源码可知,也做了相关软引用的操作
阅读更多

Android 去除重复依赖库优化

01.如何查询重复库

  • 我相信你看到了这里会有疑问,网上有许多博客作了这方面说明。但是我在这里想说,如何查找自己项目的所有依赖关系树

    • 注意要点:其中app就是项目mudule名字。 正常情况下就是app!
    1
    gradlew app:dependencies
阅读更多