Android开发是当前互联网行业的热门领域,但是在开发过程中我们会发现它有一个很大的弊端就是代码重复很多,Android代码需要和很多UI组件建立关系,后台也需异步执行很多操作,所以很容易就导致了“意大利面条”式代码。为了解决以上问题,保持代码的清晰和可读性,中培伟业《Android APP开发架构应用实战》培训专家隋老师在这里介绍了以下六个Android库。
1.Butter Knife
每访问一次视图我们都需要获取一次该视图的对象实例,我们可以通过使用rootView.findViewById()方法将返回的对象转换为正确的视图类型。但是当代码建立起来,之后你会发现这其中有很多相似的语句,尤其是在onCreate和onCreateView方法中。onCreate方法初始化所有,然后绑定侦听器,它需要把整个UI都绑在一起,所以UI元素越多,方法就会越长。
除了将它们存储在活动的字段中,可以从布局中查找视图,添加了一个匿名的内部类作为侦听器来处理搜索命令之外,代码中没有其它功能。这时,我们可以使用Butter Knife来简化代码,视图对象存储在字段中,我们可以简单地向每个字段添加Butter Knife @BindView注释
Buffer Knife主页还有很多例子可供开发人员参考,一般来说,只要你需要以编程方式来访问视图元素,Butter Knife都会让你的代码变得简洁可读。
2.Ice Pick
很多Android应用程序都会面临同一个问题,那就是活动和片段生命周期的不正确处理。我们都知道这是Android代码中不优雅的部分,但是AndroidManifest文件中禁用横向模式,当用户将设备侧向移动时,应用程序不会崩溃并非一个正确的解决方案:首先,因为它看起来有点蠢,其次,代码不能正确处理的配置更改问题仍会发生。所以,最关键的就是你要正确处理应用程序组件的状态和生命周期。
实现这一目标的方式是将活动中所有字段的内容存储到一个bundle中,然后由Android框架通过生命周期正确管理。
Ice Pick的出现简化了这一过程,它主要用于简化保存和恢复实例状态的生命周期,我们不再需要一个一个的讲所有变量保存到bundle中。下面进行一个实例示范,我们需要记住最后一家公司和存储库搜索的组合。
3.Dart and Henson
Extra是Android标准的组件之间(Activity/Fragment/Service等)传递数据的方式。Dart通过注解处理器在编译阶段生成一些代码,帮助我们避免写入从一个活动传递到另一个活动的Intent Extras的所有键和检查。它适用于Fragments。
4.Parceler
在安卓中要传递数据或者保存状态,对象需要实现Serializable或者Parcelable。与传统的Serializable相比,Parcelable被认为更快,因为它没有反射的负担(以及更少的内存),因此更适合移动app。
实现一个Parcelable需要做更多的工作。虽然Android Studio有一个自动生成代码的工具,但是每次class改变的时候都要重复这一步。而Parceler恰好可以解决这个问题,它可以帮助你进行对象序列化,帮助你传递任何对象作为Intent extra。
Parceler使用了一个注解处理器,因此首先需要应用Android APT 插件,那样你的IDE才能知道生成的类,而注解处理产生的代码菜不会包含在apk中。另外,Icepick,Henson和Dart也能和谐地和Parceler一起玩。
5.Timber
Timber是一个小的可扩展的日志工具。通常,我们在写代码的时候都会不可避免的出现一些错误,继而导致应用程序意外宕掉。这时,我们需要重现它,才能解决问题。如果你清楚重现的步骤,那么使用调试器就很方便,但是如果不清楚,也可以使用日志。
6.Dagger and Dagger 2
Dagger2是一个Java和Android的依赖注入框架,使用依赖注入有哪些好处呢?使用类和被依赖的对象构造分开,这样如果我们需要改变被依赖类的构造方法,不必改动每一个使用类;对各种被依赖类的实例,可以只构造一次;当我们需要更换一种实现时,只需要保证接口一致;利于单元测试,我们可以方便地mock依赖类的对象。
Dagger 1是由Square公司受到Guice启发创建的,可以说是Android上最流行的依赖注入框架,它在编译的时候实行绑定,同时也用到了反射机制。Dagger2是Dagger1的分支,由谷歌公司接手开发,相较于Dagger1,性能更好,更易于跟踪测试。