不得不知,身为Android开发的你

安卓巴士Android开发者门户2018-11-08 21:32:19

点击上方安卓巴士Android开发者门户可以订阅哦!

关于开源库,你最喜欢哪个?今天推荐5 个顶级 Android 开源库的文章,并且相信每个 Android 开发者都应该了解这些开源库。Android 方面已经发生了很多变化,许多新技术踊跃出来!


1. Retrofit


当涉及到实现 REST APIs 时,Retrofit 仍是我们的最爱。那么用Retrofit会非常爽!网络交互部分代码量可以减少90%。同时支持Gson,契合度很高。
另外,Retrofit和okhttp是亲兄弟,建议一起用,okhttp是底层库,能够支持一些非标准的HTTP方法,比如PATCH方法。

当然也可以组合使用:retrofit+okhttp+gson超级网络请求框架了,网上说目前这个是最快的网络请求

他们的网站上写着: “Retrofit 将 REST API 转换为 Java 接口。”是的,还有其他解决方案,但是 Retrofit 已经被证明是在一个项目中管理 API 调用最优雅、最方便的解决方案。使用注解添加请求方法和相对地址使得代码干净简单。

通过注解,你可以轻松地添加请求体,操作 URL 或请求头并添加查询参数。

为方法添加返回类型会使该方法同步执行,然而添加Callback(回调)会使之异步执行,完成后回调 success 或 failure 方法。


public interface RetrofitInterface {


    // 异步带回调

    @GET("/api/user")

    User getUser(@Query("user_id") int userId, Callback<User> callback);


    // 同步

    @POST("/api/user/register")

    User registerUser(@Body User user);

}


// 例子

RetrofitInterface retrofitInterface = new RestAdapter.Builder()

            .setEndpoint(API.API_URL).build().create(RetrofitInterface.class);


// 获取 id 为 1024 的用户

retrofitInterface.getUser(1024, new Callback<User>() {

    @Override

    public void success(User user, Response response) {


    }


    @Override

    public void failure(RetrofitError retrofitError) {


    }

});

Retrofit 默认使用 Gson,所以不需要手动解析 JSON。当然其他的转换器也是支持的。

现在 Retrofit 2.0 正在活跃地开发着,仍然是 beta,但你可以从这里获取到。从 Retrofit 1.9 开始,很多的东西都被砍了,也有一些重大的变化比如使用新的调用接口取代回调。



Stay画的精简流程图(如有错误,请斧正)


2. DBFlow

DBFlow是一款快速、功能强大和非常简单的使用annotation processing的ORM Android数据库类库,使用该类库无需编写大多数SQL语句,无需为每张表都编写ContentValues,无需将游标转化为模型等等,这样可以让开发者花费更多的精力关注复杂的问题,而不是编写重复的代码。

特性:

  • 无缝支持多个数据库;

  • 使用annotation processing提高速度;

  • ModelContainer类库可以直接解析像JSON这样的数据;

  • 增加灵活性的丰富接口。

  • 速度极快,功能强大

  • 非常简单的 Android 数据库 ORM 库,为你编写数据库代码”。


一些简单的栗子:


// Query a Listnew Select().from(SomeTable.class).queryList();new Select().from(SomeTable.class).where(conditions).queryList();


// Query Single Modelnew Select().from(SomeTable.class).querySingle();new Select().from(SomeTable.class).where(conditions).querySingle();


// Query a Table List and Cursor Listnew Select().from(SomeTable.class).where(conditions).queryTableList();new Select().from(SomeTable.class).where(conditions).queryCursorList();


// SELECT methodsnew Select().distinct().from(table).queryList();new Select().all().from(table).queryList();new Select().avg(SomeTable$Table.SALARY).from(SomeTable.class).queryList();new Select().method(SomeTable$Table.SALARY, "MAX").from(SomeTable.class).queryList();


DBFlow基于Active Android, Schematic, Ollie和Sprinkles构建,利用各个类库的优点提供更多功能和扩展。DBFlow 是一个不错的 ORM,这将消除大量用于处理数据库的样板代码。虽然 Android 也有其他的 ORM 方案,但对我们来说 DBFlow 已被证明是最好的解决方案。


3. Glide


Glide 是一个用于加载图片的库。当前备选方案有 Universal Image Loader 和 Picasso;但是,以我来看,Glide 是当前的最佳选择。Glide加载图像以及磁盘缓存的方式都要优于Picasso,速度更快,并且Glide更有利于减少OutOfMemoryError的发生,GIF动画是Glide的杀手锏。不过Picasso的图片质量更高。你更喜欢哪个呢?



 Glide 优点:

  • Glide 不仅是一个图片缓存,它支持 Gif、WebP、缩略图。甚至是 Video,所以更该当做一个媒体缓存。


  • 每次任务调度前会选择优先级高的任务,比如 App 页面中 Banner 的优先级高于 Icon 时就很适用。

  •  与 Activity/Fragment 生命周期一致,支持 trimMemory

  • Glide 对每个 context 都保持一个 RequestManager,通过 FragmentTransaction 保持与 Activity/Fragment 生命周期一致,并且有对应的 trimMemory 接口实现可供调用。

  • Glide 默认通过 UrlConnection 获取数据,可以配合 okhttp 或是 Volley 使用。实际 ImageLoader、Picasso 也都支持 okhttp、Volley。


  • 内存友好:  

  1.  Glide 的内存缓存有个 active 的设计

  2. 从内存缓存中取数据时,不像一般的实现用 get,而是用 remove,再将这个缓存数据放到一个 value 为软引用的 activeResources map 中,并计数引用数,在图片加载完成后进行判断,如果引用计数为空则回收掉。

  3. 内存缓存更小图片Glide 以 url、view_width、view_height、屏幕的分辨率等做为联合 key,将处理后的图片缓存在内存缓存中,而不是原始图片以节省大小

  4. 与 Activity/Fragment 生命周期一致,支持 trimMemory

  5. 图片默认使用默认 RGB_565 而不是 ARGB_888;虽然清晰度差些,但图片更小,也可配置到 ARGB_888。


下面是一个简单的例子,关于如何使用 Glide 从 URL 加载图片到 ImageView。


ImageView imageView = (ImageView) findViewById(R.id.my_image_view);


Glide.with(this).load("http://goo.gl/gEgYUd").into(imageView);


4. Butterknife


一个用于将 Android 视图绑定到属性和方法的库(例如,绑定一个 view 的 OnClick 事件到一个方法)。较之前版本而言,基本功能没有变化,但可选项增加了。


特性:

  • 提高开发效率

  • 减少代码量

  • 支持 View 中的 View 注入

  • 支持 View 事件回调函数注入

  • 从繁琐的 findViewById 中解救出来



栗子:


class ExampleActivity extends Activity {


  @Bind(R.id.title) TextView title;


  @Bind(R.id.subtitle) TextView subtitle;


  @Bind(R.id.footer) TextView footer;


  @Override public void onCreate(Bundle savedInstanceState) {


    super.onCreate(savedInstanceState);


    setContentView(R.layout.simple_activity);


    ButterKnife.bind(this);


    // TODO Use fields...


  }


}


5. Dagger 2


自从我们迁移到 MVP 架构,我们就开始了广泛使用依赖注入。Dagger 2 是著名的依赖注入库 Dagger 的继承者,我们强烈推荐它。

一个主要的改进就是生成的注入代码不再依赖反射,这使得调试容易了许多。

Dagger 为您创建类的实例,并满足他们的依赖。这依赖于 javax.inject.Inject 注解,以确定哪些构造函数或字段应被视为依赖。


特性:


  • 再也没有使用反射:图的验证、配置和预先设置都在编译的时候执行。

  • 容易调试和可跟踪:完全具体地调用提供和创建的堆栈。

  • 更好的性能:谷歌声称他们提高了13%的处理性能。

  • 代码混淆:使用派遣方法,就如同自己写的代码一样。





后记:当然,所有的开源库,都有一定的利与弊,或者你有更好的开源库推荐,留言即可!把你的想法分享出来,让大家探讨!


点击“阅读原文”有更多干货哦!
Copyright © 丰城计算器学习组@2017