目的
在Android开发阶段,组件之间的通信是不可避免的,组件之间的通信方式也会有很多,它们各有优劣,今天我们主要了解的是,一种万能接口的方式来实现,一个简单而优雅的通讯方式,用少量的代码,来完成组件间的通信解耦。
常用的组件间的通讯方式
其中最常用就前三种,其中:
- Intent 只能界面逐级传输
- Handler 存在内存泄漏, 在activity被销毁时,由于队列还有消息,Handler还存在,造成存在泄漏。
- interface 书写反锁,耦合性强,并且不能切换线程
当然也有一些常用的三方的框架,如EventBus,XBus等等,但是一个优秀的第三方框架百分之八十的功能我们都不会使用,所以当这些都没有的时候,我们如何更加优雅的实现大量组件间的通信了?
“数据源” – 思路
核心思想
- 通过数据源或方法栈中转,组件只管接受或发送
- 将方法进行封装
- 将方法提取出来进行管理
具体实践
1.方法的封装
四种类型:
方法封装的父类
package com.fly.newstart.neinterface;
/**
* <pre>
* .----.
* _.'__ `.
* .--(Q)(OK)---/$\
* .' @ /$$$\
* : , $$$$$
* `-..__.-' _.-\$/
* `;_: `"'
* .'"""""`.
* /, FLY ,\
* // \\
* `-._______.-'
* ___`. | .'___
* (______|______)
* </pre>
* 包 名 : com.fly.newstart.neinterface
* 作 者 : FLY
* 创建时间 : 2019/4/23
* 描述: 方法封装管理的父类
*/
public class Function {
//方法名称
public String functionName;
public Function(String functionName) {
this.functionName = functionName;
}
}
无参数无返回值类型方法
package com.fly.newstart.neinterface;
/**
* <pre>
* .----.
* _.'__ `.
* .--(Q)(OK)---/$\
* .' @ /$$$\
* : , $$$$$
* `-..__.-' _.-\$/
* `;_: `"'
* .'"""""`.
* /, FLY ,\
* // \\
* `-._______.-'
* ___`. | .'___
* (______|______)
* </pre>
* 包 名 : com.fly.newstart.neinterface
* 作 者 : FLY
* 创建时间 : 2019/4/23
* 描述: 无参数 无返回 类型 方法
*/
public abstract class FunctionNoParamNoResult extends Function{
public FunctionNoParamNoResult(String functionName) {
super(functionName);
}
public abstract void function();
}
无参数有返回值类型方法
package com.fly.newstart.neinterface;
/**
* <pre>
* .----.
* _.'__ `.
* .--(Q)(OK)---/$\
* .' @ /$$$\
* : , $$$$$
* `-..__.-' _.-\$/
* `;_: `"'
* .'"""""`.
* /, FLY ,\
* // \\
* `-._______.-'
* ___`. | .'___
* (______|______)
* </pre>
* 包 名 : com.fly.newstart.neinterface
* 作 者 : FLY
* 创建时间 : 2019/4/23
* 描述: 无参数 有返回值 类型 方法
*/
public abstract class FunctionNoParamHasResult<T> extends Function{
public FunctionNoParamHasResult(String functionName) {
super(functionName);
}
public abstract T function();
}
有参数无返回值类型方法
package com.fly.newstart.neinterface;
/**
* <pre>
* .----.
* _.'__ `.
* .--(Q)(OK)---/$\
* .' @ /$$$\
* : , $$$$$
* `-..__.-' _.-\$/
* `;_: `"'
* .'"""""`.
* /, FLY ,\
* // \\
* `-._______.-'
* ___`. | .'___
* (______|______)
* </