为什么Intent传递对象为什么需要序列化?(阿里)
这道题想考察什么?
掌握序列化的意义与Android数据传输的原理
考察的知识点
序列化
Binder
考生应该如何回答
在Android中使用Intent传输数据除了基本数据类型之外,对于其他类型对象需要此类型实现了Serializable或者Parcelable序列化接口才能进行传输。
以startActivity为例:
Intent intent = new Intent(context,OtherActivity.class);
//字符串实现了Serializable序列化
intent.putExtra("a","享学");
//Message实现了Parcelable序列化
intent.putExtra("b",new android.os.Message());
//错误:上下文context并未实现序列化
intent.putExtra("c",context);
startActivity(intent);
Intent传输数据本质上是使用Binder来完成的。Intent启动组件需要借助AMS完成,因此startActivity
会离开当前应用进程,进入AMS所在的system_server进程进行跨进程通信。这就意味着传输的对象需要在不同进程之间进行传输。
为了保护不同进程互不干扰,进程隔离让system_server进程无法直接获取应用进程内存中的对象。因此必须通过类似于复制的手段,将应用进程的对象传递给system_server进程,再由system_server进程传递给应用中的OtherActivity
。
根据**《2.9 序列Parcelable,Serializable的区别?》**可知,Serializable会利用IO将对象写入到文件中;而Parcelable则会将对象写入到Parcel中,两种方式都可以解决跨进程的数据传递。因此Intent传递的对象需要实现Serializable或者Parcelable序列化。
更多面试题详解可以扫描二维码免费领取!
![](https://i-blog.csdnimg.cn/blog_migrate/70f43e3ff4c26224f5db361ec6f711f6.png)