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
阅读更多

Android 网络异常优化

01.网络请求异常分类

  • 网络请求异常大概有哪些?
    • 第一种:访问接口异常,比如404,500等异常,出现这类异常,Retrofit会自动抛出异常。
    • 第二种:解析数据异常,数据体发生变化可能会导致这个问题。
    • 第三种:其他类型异常,比如服务器响应超时异常,链接失败异常,网络未连接异常等等。
    • 第四种:网络请求成功,但是服务器定义了异常状态,比如token失效,参数传递错误,或者统一给提示(这个地方比较拗口,比如购物app,你购买n件商品请求接口成功,code为200,但是服务器发现没有这么多商品,这个时候就会给你一个提示,然后客户端拿到这个进行吐司)
阅读更多

Android 注解替代枚举

01.使用注解限定传入类型

  • 使用注解限定传入类型

    • 比如,尤其是写第三方开源库,对于有些暴露给开发者的方法,需要限定传入类型是有必要的。举个例子:

    • 刚开始的代码

      1
      2
      3
      4
      5
      6
      7
      8
      9
      /**
      * 设置播放器类型,必须设置
      * 注意:感谢某人建议,这里限定了传入值类型
      * 输入值:111 或者 222
      * @param playerType IjkPlayer or MediaPlayer.
      */
      public void setPlayerType(int playerType) {
      mPlayerType = playerType;
      }
阅读更多

Android 轮询操作优化

01.轮询操作是啥

  • 什么叫轮训请求?
    • 简单理解就是App端每隔一定的时间重复请求的操作就叫做轮训请求,比如:App端每隔一段时间上报一次定位信息,App端每隔一段时间拉去一次用户状态等,这些应该都是轮训请求。
  • 为何不用长连接代替轮训操作?
    • 长连接并不是稳定的可靠的,而执行轮训操作的时候一般都是要稳定的网络请求,而且轮训操作一般都是有生命周期的,即在一定的生命周期内执行轮训操作,而长连接一般都是整个进程生命周期的,所以从这方面讲也不太适合。
阅读更多

Android 对象池 Pools 优化

01.什么时对象池

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

02.glide使用对象池

阅读更多