使用Bundle
四大组件中的三大组件(Activity、Service、BoardcastReceiver)都支持在Intent中传递Bundle数据。Bundle实现了Parcelable接口,可以很方便地在不同进程间传输。
我们可以在Bundle附加要传输给其他进程的信息并通过Intent发送给其他进程。注意的是传输的数据必须是可以被序列化的,例如基本类型、实现了Serializable或Parcelable接口的对象以及一些Android支持的特殊对象。
四大组件中的三大组件(Activity、Service、BoardcastReceiver)都支持在Intent中传递Bundle数据。Bundle实现了Parcelable接口,可以很方便地在不同进程间传输。
我们可以在Bundle附加要传输给其他进程的信息并通过Intent发送给其他进程。注意的是传输的数据必须是可以被序列化的,例如基本类型、实现了Serializable或Parcelable接口的对象以及一些Android支持的特殊对象。
IPC是Inter-Process Communication的缩写,翻译过来是进程间通信的意思,指至少两个进程或线程间传送数据或信号的一些技术或方法(安卓一般是指两个进程之间进行数据交换的过程)。
动态注册的过程从ContextWrapper的registerReceiver方法开始1
2
3
4
5@Override
public Intent registerReceiver(
BroadcastReceiver receiver, IntentFilter filter) {
return mBase.registerReceiver(receiver, filter);
}
和Activity、Service一样,ContextWrapper没有做任何操作,而是把任务交给了ContextImpl(mBase的实现类型是ContextImpl)来完成。接着看ContextImpl的registerReceiver方法。
给出一个区间的集合,请合并所有重叠的区间。
示例1:1
2
3输入: [[1,3],[2,6],[8,10],[15,18]]
输出: [[1,6],[8,10],[15,18]]
解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].
和Service的启动过程一样,Service的绑定过程也是从ContextWrapper开始的,mBase同样是ContextImpl类型的对象,所以真正调用的是ContextImpl的bindService方法。1
2
3
4
5@Override
public boolean bindService(Intent service, ServiceConnection conn,
int flags) {
return mBase.bindService(service, conn, flags);
}