Android消息传递机制总结(二)

组件间通信 ——— BroadcastReceiver,接口回调等。

2.组件间通信

BroadcastReceiver广播就不再介绍, 广播传递本身是有安全隐患的,需要设置权限,每一个Activity都要定义、注册,解注册广播无形中加大了工作量和维护成本。已经不适应用在组件间通信。

接口回调: 和观察者模式大致一样。
实例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86

public class DataSynManager {
//监听集合
private LinkedList<IDataSynListener> autoListeners = new LinkedList<>();
//单例引用
private static DataSynManager mInstance;

/**
* 获取单例引用
*
* @return
*/
public static DataSynManager getInstance() {
if (mInstance == null) {
synchronized (DataSynManager.class) {
if (mInstance == null) {
mInstance = new DataSynManager();
}
}
}
return mInstance;
}

/**
* 添加同步数据监听
*
* @param listener
*/
public void registerDataSynListener(IDataSynListener listener) {
if (autoListeners == null) {
autoListeners = new LinkedList<>();
}
if (!autoListeners.contains(listener)) {
autoListeners.add(listener);
}
}

/**
* 移除同步数据监听
*
* @param listener
*/
public void unRegisterSynListener(IDataSynListener listener) {
if (autoListeners == null) {
return;
}
if (autoListeners.contains(listener)) {
autoListeners.remove(listener);
}
}

/**
* 执行数据同步
*
* @param count
*/
public void doDataSyn(final int count) {
if (autoListeners == null) {
autoListeners = new LinkedList<>();
}
new Handler().post(new Runnable() {
@Override
public void run() {
for (IDataSynListener dataSynListener :
autoListeners) {
dataSynListener.onDataSyn(count);
}
}
});
}

/**
* 清除所有监听者
*/
public void release() {
if (autoListeners != null) {
autoListeners.clear();
autoListeners = null;
}
}

public interface IDataSynListener {
void onDataSyn(int count);
}
}

使用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//添加监听
DataSynManager.getInstance().registerDataSynListener(dataSynListener);
//移除监听
DataSynManager.getInstance().unRegisterDataSynListener(dataSynListener//个监听);


DataSynManager.IDataSynListener dataSynListener=new DataSynManager.IDataSynListener() {
@Override
public void onDataSyn(int count) {
//接下来执行同步操作
}
}

};
//发送事件
DataSynManager.getInstance().doDa(5);

3. 第三方通信 ——— EventBus,rxBus