学习总结(其他)

万能接口

众所周知,现如今绝大多数的APP都是基于Activity和Fragment开发的。如下图中的淘宝app


Fragment,在Android 2.3版本后出现,出现的主要目的就是解决Android碎片化太过严重的问题。

那么Activity和Fragment之间是怎么通信的呢?


如上图所示,上面的每个箭头都表示Activity和Fragment之间的通信。但是一个app不可能只有一个Activity,如果每个Activity和Fragment之间频繁的通信,那么app的耦合度就会非常高。那么有人会说了,我们平常做通信都是用第三方,诸如 EventBus、 Rxbus等等。Fragment之间也是Fragment也是通过这些工具也没出过问题啊。

那么重点来了,谷歌官方明确规定

 Two Fragments should never communicate diretly.

翻译过来的意思就Fragment之间不允许有直接的通信。因为会造成耦合多高的问题。

其他通信的方式分析

1. EventBus

优点:使用方便,快捷

缺点:

1.大家知道EventBus内部通过反射进行操作,而反射在Android中则会对性能有部分的损耗。而我们的App中,UI显示的速度以及相应时间则尤为重要,可能短暂的延迟和卡顿就会降低用户使用体验度;

2.后期代码维护相对比较困难,想当初学习的时候,各种蒙比,有时候甚至找不到传递的值在哪儿接收;

3.而最重要的一点则是,EventBus是单向传递数据,通俗来讲就是不能返回数据,这边就比较恶心了。

2. handler

优点:能解决问题

缺点:

1.与其配合使用统一反应出的问题就是耦合度太高;

2.无法获取activity的返回结果。比如Fragment发送一个数据到Activity中 要求Activity处理完之后返回到Fragment中,那么这时候Handler有点low了;

3.内存泄漏


3. Static

缺点:用static修改的变量等一般都是存在于内存中,当多个变量存在的时候,便会加大系统内存,无形中也在消耗系统资源

4. 广播

首先要明确,虽然我们玩广播几行代码的事儿,但是我们要知道,广播机制以及内部实现是一个非常庞大且非常复杂的系统应用,同时,也一般被应用于监听系统为主,例如开机,接收短信等等

缺点如下:

1.性能差 有延迟;

2.传播的数据有限;

3.代码冗余,而且一个广播发出,会在多个地方被接受到,无形中消耗资源

5. 接口

优点:

优点 简单 效率高 方便 解耦合

缺点:

代码冗余 每个通信的fragment 都必须定义自己独一无二的接口

原文:https://blog.csdn.net/u012400885/article/details/77892974

我们对接口的方式单独分析下:我们知道,通过接口的方式,每个Fragment都要定一个接口,如果一个Activity需要执行这些接口,那么Activity都需要执行每个接口代码,造成代码量和工作量的增加。

那么今天我们通过接口的方式封装一个万能接口,减少代码量,完成基本的Activity与Fragment,Fragment与Fragment的通信。

先分析下接口:

一个接口包含了: 接口名称、接口返回值、接口参数、没有执行的函数体。

针对返回值和接口的参数有四种状态:

1、无参数无返回值

2、无参数有返回值

3、有参数无返回值

4、有参数有返回值

创建一个接口基类


根据四个状态创建四个接口类实现基类:

1、无参数无返回值

2、无参数有返回值


3、有参数无返回值


4、有参数有返回值


定义完所有的接口抽象类之后,我们在定义一个接口管理类,通过接口管理类来管理调用对应的函数方法:






然后,定义一个要使用回调接口的Fragment的基类。

BaseFragment类:


在MainActivity中添加具体执行


好了,我们测试一下无参有返回值的通知。该通知是FragmentTwo发出的,在MainActivity接收。


那么如果是Fragment之间是要怎么通信呢?前面我们也讲了官方为了降低耦合性不允许Fragment之间的交互。那么我们可以通过Activity的桥梁联系.

Fragment1 --> Activity -->Fragment2

我们来做个图说明


分析一下之前的FunctionManager

1、针对不同的类型,需要用不同的容器来盛放

2、提供添加“接口”到管理类里的方法

3、提供调用不同类型“接口”的方法

4、最好能支持链式调用

综合以上的条件我们可以看到 页面间的交流通知全部通过链式的方式添加到了FunctionManager类中,这里我们使用HashMap的链式方式通过方法名从管理类中取出接口的执行,大大解耦.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容