Android Intent 和内存

标签 android android-intent memory

我想知道一件简单的事情。我正在制作一个 Android 应用程序,我开始自问内存使用情况。

当我调用新 Intent 时,Android 操作系统会做什么?

假设我有一个只有一个按钮的 Intent ,这个按钮的 onclickmethod 正在为同一 Activity 创建一个新的 Intent 。

如果点击我这样做??

Intent activityN = new Intent(Activity.this,Activity.class);
startActivity(activityN);

firstActivity 是被杀死了还是 android 保留了它?

如果我点击 50 次??

感谢您的回答

最佳答案

Activity 生命周期是一个棘手的话题。

在大多数情况下, Activity 将保存在内存中,但在某些情况下,Android 可能会决定销毁它以回收资源。您无法控制这种行为,它可能会在操作系统版本甚至硬件配置之间发生变化。不要试图与之抗争 - 拥抱它。

Activity 状态保存在 onSaveInstanceState(Bundle) 中,它在将 Activity 置于后台状态之前调用。

当 Activity 即将显示时 - 但为了回收资源而被销毁 - 它可以使用 onCreate() 方法中的 savedInstanceState 重新创建。你应该处理这种情况。大多数程序员并不关心,这会导致屏幕旋转和长时间不活动后出现奇怪的错误。

您可以将此机制视为一种序列化/反序列化方案,它允许 Android 优化内存使用,丢弃可以按需重新创建的数据(例如 UI 布局)并仅保存无法重新创建的内容,例如UI 状态(输入的文本、复选框状态等)。

由于 Activity 销毁在正常情况下是相当不可预测的,因此 Android 提供了特殊的开发人员选项以始终在可能的情况下销毁 Activity。这使您无需太多努力即可正确处理 Activity 生命周期中的所有极端情况。探索您设备的开发者选项。

您可能想查看这些文章以了解有关该主题的更多信息:

回到您关于单击按钮 50 次的问题……它可能会创建 50 个 Activity 实例,并相互堆叠。 Android 可能会开始销毁第一个 Activity,以便在内存中为新 Activity 腾出空间。假设该设备只有 49 个 Activity 的内存。你开始 49 - 所有都保存在内存中。你从第 50 个开始,第 1 个将被摧毁。她的状态保存在 Bundle 中,因此当您按 49 次返回时,第一个将从这个保存的包中重新创建。

关于Android Intent 和内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27909012/

相关文章:

javascript - 是否有一些库可用于 IQR 代码(不是 QR 代码)?

java - 原生 Android 媒体播放器如何使数据持久化并反射(reflect)变化

android - 在 onCreate 之前将 Intent 添加到 Robolectric 中的 Activity

linux - 为什么 "swappiness"的讨论就像一次只能在一个地方的信息一样?

c - 内存如何确定变量的数据类型?

java - 有没有一种内存效率高的替代方案来替代graphics.drawImage()?

java - 使用 LocationManager requestLocationUpdates 方法时过滤位置更新

java - 点击另一个支持 NFC 的设备后无法进入 onNewIntent。(android)

android - getIntent() 方法未为类型 ParseApplication 定义

java - Apache Cordova 媒体捕获插件不显示视频记录倒计时时间