savedInstanceState内存含义

时间:2014-11-14 16:59:23

标签: android android-fragments android-lifecycle android-bundle

我正在与一些其他开发人员合作开发一个Android项目,并且在垃圾收集中没有保留实例状态的错误:

报告的实际错误:

该应用有一个活动,包含一堆片段。如果在开发人员选项中选中“不保留活动”,并且用户单击任何更改可见片段的按钮,然后导航离开应用程序然后返回,则会将应用程序重新启动到其原始状态而不是最后状态

该项目的另一位开发人员提出了以下问题:

  

“保存实例会导致内存大小的应用程序膨胀。   由于可绘制的数量,应用程序内存大小已经是   太高。

     

没问题,如果应用程序在用户暂停一段时间后重新启动。“

我的理解是savedInstance Bundle实际上被写入物理内存,这是不正确的?以上引用是否是一个有效的问题?

2 个答案:

答案 0 :(得分:3)

  

我的理解是savedInstance Bundle实际上被写入物理内存,这是不正确的?

我正在解释"写入物理记忆"作为意义"写入文件系统上的文件" (a.k.a。,"坚持")。

实例状态Bundle未保留。 Android 5.0+为PersistableBundle提供了一个不同的挂钩, 持久存在,因此可以在重新启动后继续使用。

但是,实例状态Bundle跨进程边界传递给核心OS进程。如果您的流程已终止,则可以使用该数据,但当您的任务仍然存在时,用户会返回您的应用程序(例如,通过最近任务列表)。

  

以上引用是否是一个有效的问题?

这篇引文中唯一能够由SO在此合理评估的部分是:

  

保存实例会导致内存大小的应用程序膨胀

Bundle中保存一个字节将比在Bundle中保存零字节消耗更多内存。因此,在数学上,引用是准确的。关键是保持Bundle小。由于其他原因,它们无论如何都不会变得太大(IPC呼叫限制为1MB)。小实例状态Bundles应该不是问题。

答案 1 :(得分:0)

正确编码的saveinstance状态将在后台存活数周,并且不需要超过几个字节,最差情况下只有几k内存。

您的其他开发人员存在学习曲线问题。

InstanceState保存您重新创建应用当前向用户查看的方式所需的内容。让我们用一个tic tac toe比喻。你有九个职位。每个位置都是x o或空白。而且你可以拯救谁。十字符串没有膨胀,这不是火箭科学。

应用的InstanceState,屏幕上有10个drawable。你将drawables保存到外部存储器jpg甚至bmp。然后在instanceState中保存drawable的名称。 1000个实例的字符表示没有膨胀,这是计算机科学1k重启一个非常复杂的应用程序。

SaveinstanceState并不是一个很棒的应用程序。

相关问题