根据截至2023年3月1日的Android开发人员文档,已保存的示例状态读取/写入速度缓慢。
这是因为它需要序列化/反序列化过程,并且需要***磁盘访问***。
我的理解是,Saved Instance State使用Bundle对象来存储数据,并且将使用onCreate
和onRestoreInstanceState
处的Bundle对象来恢复数据。
我的问题是,由于Bundle对象将存储在内存中,它如何访问磁盘以读取/写入存储的数据?
由于这些问题,我也搞不清楚SavedInstanceState如何从进程销毁中安全地恢复,因为在进程被系统销毁时,内存也将被销毁。
谢谢。
我已经附上了相关的开发人员文档链接和下面的图表。
Android开发者-保存UI状态
2条答案
按热度按时间oalqel3c1#
因为数据需要在某个时候存储到磁盘。操作系统实际上可能会终止您的进程并稍后重新启动它,传入一个与您从saveInstanceState返回的Bundle匹配的Bundle。为了实现这一点,它需要将其序列化到磁盘,所以它在进程示例之间保存。操作系统是否真的将它写入磁盘是操作系统的实现细节-它可能不在所有情况下。但它可以。
当然,由于它是Bundle支持的,我不会担心阅读Bundle的速度。我更担心的是Bundle的大小限制(1- 2 MB),如果超过这个限制,你会崩溃。
ctehm74n2#
我的问题是,由于Bundle对象将存储在内存中,它如何访问磁盘以读取/写入存储的数据?
恕我直言,这是一个文档错误。出于该表的目的,我会选择“快速,但需要进程间通信(IPC)”。经典的
Bundle
不是持久化的,也不是持久化的。Android 5.x引入了一个
onSaveInstanceState()
和onRestoreInstanceState()
版本,它同时接受Bundle
和PersistableBundle
。后者确实是持久化的。但是,您的表的第一行向我表明,他们没有考虑这种情况。理想情况下,这个表应该有五列,其中两列是“Saved Instance State”,涵盖
Bundle
和PersistableBundle
场景。