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

Intent在Android中用于启动组件并传递数据,但仅支持基本类型和实现了Serializable或Parcelable接口的对象。这是因为Intent依赖Binder进行跨进程通信,对象需要在进程间复制。Serializable通过IO序列化到文件,Parcelable则将对象写入Parcel,两者都允许数据在不同进程间传递。
摘要由CSDN通过智能技术生成

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值