以下是我这个系列的相关文章,有兴趣可以参考一下,可以给个喜欢或者关注我的文章。

[Android]如何做一个崩溃率少于千分之三噶应用app(1)-module工程架构

[Android]如何做一个崩溃率少于千分之三噶应用app(2)-完全退出App

[Android]如何做一个崩溃率少于千分之三噶应用app(3)-极速编译

[Android]如何做一个崩溃率少于千分之三噶应用app(4)-极速编译*续

[Android]如何做一个崩溃率少于千分之三噶应用app(5)-极速增量编译


这章的名字是《动态创建》

为何要使用动态创建?

其实就是用来降低对于其他module的类的耦合


我们工程很多时候都会依赖于别的工程模块,例如我们需要增加一个功能模块的时候,就需要里面的一些Fragment Activity等资源,倘若我们有一天不想要这些资源了,去除这个依赖,那去除这些资源的引用,可能需要很多的时间,那这样也违反我们设计的初综,尽量可以不修改原有的代码。(对扩展开放,对修改关闭)

可以用这个界面想象一下,我们如果需要添加多个模块,或者多个模块需要如何去做才能降低依赖的耦合。

录制app

这里是我的做法

1.将每个功能做成一个单一的module

其中record_read,reocord_record,record_settings都是libs的module

app会统一管理这些module

2.用一个主的Activity管理引用这些Fragment,我这里用到的是ViewPager

(1)Fragment的地址用String的数组存储

不同module的Fragment地址

(2)通过反射创建,添加到ViewPager

Class.forName( )静态方法的目的是为了动态加载类。在加载完成后,一般还要调用Class下的newInstance( )静态方法来实例化对象以便操作

动态加载

这样做就不用import相应的包到主工程。

然后如果去除相应的包的时候,只需要在Fragment的地址用String的数组去除,添加一个新功能也同样如此,极大降低工程对其他功能的耦合。

就算地址依赖不存在了,保持原有代码,也会第一次时间被try catch处理,不会导致崩溃。


当然这个也有其局限性

1.就是使用newInstance来初始化对象,其无法使用有参的构造,对比于我们平时用new创建对象。

newInstance: 弱类型。低效率。只能调用无参构造。

new: 强类型。相对高效。能调用任何public构造。


2.当然newInstance也是可以通过反射使用参数版本的构造的,只是稍显复杂一点,效率也不高就是了。

Class.newInstance() 只能够调用无参的构造函数,即默认的构造函数;

Constructor.newInstance() 可以根据传入的参数,调用任意构造构造函数。

newInstance多参数版本构造


3.创建的效率会牺牲一点,但是会更加安全。


********************2016.11.23更新*********************

我在ModuleBus交互提供了交互的新的module交互框架里面,动态创建的运用的例子,有兴趣的话,可以查看一下。


这章就到这里啦,希望对大家有构建工程的时候有帮助。

下一章会介绍更奇妙的内容,就是不相互依赖的module如何通信,敬请期待。


********************2019.2.13更新*******************

这里存在着取舍,如果要优化耦合就用上面说的方式。

如果要优化效率,只能使用类似于ARouter路由方案的,Fragment获取+IProvider接口调用。缺点是base模块放置接口文件,实现在功能module

更多相关文章

  1. Android消息机制Looper与VSync的传播
  2. android(NDK+JNI)---Android使用JNI实现Java与C之间传递数据
  3. android利用JNI调用C++自定义类
  4. android onRestoreInstanceState调用时序
  5. Android之调用js常见错误
  6. 调用Android系统设置项
  7. Android调用MediaScanner进行扫描
  8. android背景模糊化处理
  9. Android(安卓)关机流程分析

随机推荐

  1. AndroidStudio使用技巧
  2. Android(安卓)pm命令 以及在终端安装卸载
  3. Android自动测试之benchmark test 简介
  4. Android 性能优化之内存泄漏检测以及内存
  5. android 学习技术点 网址集锦
  6. 常用组件:android的图片组件ImageView
  7. Android Flash 10.1与Lite版视频播放能力
  8. Android 软键盘控制弹出(很好使,自己写的,绝
  9. Android 第一课——Android架构
  10. Android系统原理与开发要点详解