Android onSaveInstanceState包保存在哪里?

Android onSaveInstanceState包保存在哪里?,android,Android,我想知道方法的bundle“outState”存储在哪里 它是存储在内存中还是存储在设备存储器中 我担心存储在捆绑包中的数据的安全性。我猜应该是在内存中,但保护数据的最佳方法是不要信任系统并对其进行加密。永远不要信任客户机(在这种情况下,客户机就是操作系统) 编辑: 要清楚,我不是说加密包。相反,我是说,任何敏感数据都不应该放入捆绑包中。如果必须将自定义数据放入捆绑包中,则对其进行加密 但最终,您应该在客户端上保留尽可能少的敏感数据。这与电子商务网站仅显示信用卡的最后4位数字的原因相同。若要仅存

我想知道方法的bundle“outState”存储在哪里

它是存储在内存中还是存储在设备存储器中


我担心存储在捆绑包中的数据的安全性。

我猜应该是在内存中,但保护数据的最佳方法是不要信任系统并对其进行加密。永远不要信任客户机(在这种情况下,客户机就是操作系统)

编辑:


要清楚,我不是说加密包。相反,我是说,任何敏感数据都不应该放入捆绑包中。如果必须将自定义数据放入捆绑包中,则对其进行加密


但最终,您应该在客户端上保留尽可能少的敏感数据。这与电子商务网站仅显示信用卡的最后4位数字的原因相同。

若要仅存储应用程序生命周期内的数据(即临时),请使用onSaveInstanceState(Bundle)活动事件

在应用程序关闭之前,此数据只会保存在内存中,在应用程序的当前生命周期内,此活动开始时,数据将随时可用

说明:如果数据由活动A存储在此处,则应用程序显示不同的活动或旋转屏幕(因此关闭A),然后返回到A。可以检索数据以填充控件。但是,如果关闭并再次打开应用程序,数据将消失,控件将恢复为默认值

使用示例:存储用户键入的文本和组成订单、博客条目、消息等的选项

注意:

请务必注意,只有活动被销毁并重新创建,而不是整个应用程序!Android应用程序可以由许多活动、服务和内容提供商组成!如果应用程序关闭(例如,按下“后退”按钮),则所有值都将消失。savedInstaceState仅用于在销毁/重新创建活动时临时保留数据,而不是应用程序本身


如果您想永久保存数据,您需要将其保存为首选项或内容提供商/数据库。

我认为任何恶意后台进程都无法获取您应用程序的捆绑数据。Android如何处理捆绑数据没有任何文档记录。它可能会或可能不会在将来写入磁盘但是,考虑到我们不知道这些数据是否被保存到磁盘,如果是的话,考虑到我们不知道这些数据在哪里,而且几乎可以肯定的是,我们没有对磁盘那部分的读取权限,我不会担心第三方进程能够恢复这些数据

因此,我不清楚你可能认为曝光是什么。尽管我可能遗漏了一些东西。 然而,在回答你的问题时,当你的应用程序还活着的时候,它绝对在内存中,如果你的应用程序是背景的,它可能被写在某个隐藏的地方,也可能不被写在某个地方,但我们不知道,因为谷歌没有告诉我们


当收集内存时,它将随应用程序一起销毁。

以下是有关
超出状态的捆绑数据保存位置的详细答案:

…bundle是一种IPC机制,所以它不会进入文件系统。但是现在涉及到一个p–它是哪个进程?这个进程对这些数据做了什么?我需要担心吗?事实证明,这些实例状态bundle存储在Activity Manager服务中android源代码中的com.android.server.am包。回想一下,活动是一个叠在另一个上面的,android将这些叠称为“任务”…这些任务中的每个任务都在内部用类TaskRecord的对象表示。此类包含ActivityRecord对象数组,每个对象管理活动的状态。ActivityRecord包含名为ICICIL的类型束成员。此ICICIL束是保存的实例状态,并且它是s实际存储在Activity Manager服务的内存空间中

来源:

已更新,并准确指示状态已序列化到磁盘:

已保存的实例状态捆绑包保留配置更改和进程死亡,但受存储量和速度的限制,因为
onSavedInstanceState()
将数据序列化到磁盘。

您还可以找到一个表,比较不同的保存UI状态的方法


源:

谢谢,这正是我想知道的,这是一个不准确的答案。考虑一下这个应用程序进程被OS自动杀死(应用程序在后台),然后用户回到应用程序,然后OS恢复应用程序(创建一个新进程并恢复活动堆栈)。。尽管应用程序进程在一段时间内不存在,但该捆绑包被提供给还原的活动,因此它以某种方式/某处存储在系统中。反过来,系统无法确定它存储捆绑包的确切方式,因此理论上它可能会使用文件系统。您还可以从Commonware中查看相关答案:@Arhimed,I think您在吹毛求疵,但我将编辑我的答案以澄清。@GeniaS。谢谢您的编辑。现在它清楚地表明,在进程终止时,我们不知道捆绑包存储在哪里。谢谢,我只是想知道数据保存在内存中。安卓使用
onSaveInstanceState
/
onRestoreInstanceState
进行per当系统终止可能需要在将来恢复的活动(例如,屏幕旋转或内存不足)时,列出每个视图的UI状态。如果您确实想加密该信息(您不想),则需要保存并恢复所有状态信息