app崩溃率优化android,[Android]如何做一个崩溃率少于千分之三噶应用app(6)-动态创建...

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

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

为何要使用动态创建?

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

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

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

c6752fd603d6

录制app

这里是我的做法

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

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

app会统一管理这些module

c6752fd603d6

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

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

c6752fd603d6

不同module的Fragment地址

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

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

c6752fd603d6

动态加载

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

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

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

当然这个也有其局限性

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

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

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

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

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

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

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

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

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

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

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

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值