我想知道存储onSaveInstanceState(Bundle outState)方法的bundle"outState"的位置.
它是存储在内存中还是存储在设备中?
我担心存储在捆绑中的数据的安全性.
要仅为应用程序生命周期(即临时)存储数据,请使用onSaveInstanceState(Bundle)活动事件
此数据仅在应用程序关闭之前保留在内存中,只要此活动在应用程序的当前生命周期内开始,数据就可用.
说明:如果数据由活动A存储在此处,则应用程序显示不同的活动或旋转屏幕(因此关闭A)然后返回到A,可以检索数据以填充控件.但是,如果应用程序关闭并再次打开,数据将会消失,控件将恢复为默认值.
使用示例:存储用户输入的文本和组成订单,博客条目,消息等的选择...
注意:
重要的是要注意只有Activity被销毁和重新创建,而不是整个应用程序!Android应用程序可以包含许多活动,服务和ContentProviders!如果应用程序已关闭(例如,通过按"后退"按钮,则所有值都将消失.soredInstaceState仅用于在销毁/重新创建活动时保留临时数据,而不是应用程序本身.
如果要永久保留数据,则需要将其另存为"首选项"或ContentProvider /数据库.
我认为任何恶意后台进程都无法获取应用程序的捆绑数据.没有记录Android如何处理Bundle数据.在您的应用程序被清理时,它可能会也可能不会写入磁盘,而后台则是.但是,鉴于我们不知道这些数据是否保存到磁盘,如果是这样,假设我们不知道哪里,并且几乎肯定没有读取访问磁盘的那部分,我不会不用担心某些第三方进程能够恢复该数据.
因此,我不清楚你认为曝光是什么.虽然我可能会遗漏一些东西.但是,在回答你的问题时,它绝对是在你的应用程序存活的内存中,并且如果你的应用程序是背景的,它可能会或可能不会被隐藏在某处,但我们不知道因为Google没有告诉我们.
收集内存时,它会随应用程序一起被销毁.
以下是outStateBundle 数据保存位置的详细答案:
...bundle 是一种 IPC 机制,所以它不会进入文件系统。但是现在涉及到一个 P——它是哪个进程?这个过程对这些数据做了什么?我需要担心吗?事实证明,这些实例状态包存储在 Activity Manager 服务中。此服务在 Android 源代码中的包 com.android.server.am 下实现。回想一下,Activity 是一个叠在一起的,Android 将这些堆栈称为“任务”……这些任务中的每一个都在内部用TaskRecord类的对象表示。这个类包含一个ActivityRecord数组对象,每个对象管理一个活动的状态。ActivityRecord 包含一个名为 icicle 的 Bundle 类型成员。这个 icicle-bundle 是保存的实例状态,它实际上存储在 Activity Manager 服务的内存空间中。
来源:https : //www.linkedin.com/pulse/android-onsaveinstancestate-bundle-secret-safe-daniel-pietsch/
该文档已被更新,准确地指示状态序列化到磁盘:
保存的实例状态包同时保留配置更改和进程死亡,但由于将数据序列化到磁盘而受到存储量和速度的限制
onSavedInstanceState()。
您还可以找到一个表格,比较不同的方法来保留 UI 状态
来源:https : //developer.android.com/topic/libraries/architecture/saving-states
| 归档时间: |
|
| 查看次数: |
4216 次 |
| 最近记录: |