Android面试题详解之为什么Intent传递对象为什么需要序列化?(阿里)

为什么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序列化。
在这里插入图片描述

更多面试题详解可以扫描二维码免费领取!

猜你喜欢

转载自blog.csdn.net/Misdirection_XG/article/details/131209014