Android 意图和记忆

Android Intent And Memory

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

当我调用新 Intent 时,android OS 会产生什么?

假设我有一个只有一个按钮的意图,而这个按钮 onclickmethod 正在制作一个新的相同意图 activity。

如果点击我这样做??

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

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

如果我点击 50 次??

感谢您的回答

Android保留第一个Activity。这就是为什么当第二个 Activity 完成时,您可以 return (甚至结果)到相同的状态。如果您单击该按钮 50 次,您将启动 50 个新活动。你通常想避免这种情况,所以在第一次按下按钮后禁用该按钮是个好主意。幸运的是,您的新 activity 应该可以快速启动并覆盖按钮,因此很难做到 50(尽管 2 或 3 不是)。

这取决于您随 Intent 提供的标志。

如果没有标志,则每个 startActivity 都会创建一个新的 Activity

但是,可以有 FLAG_ACTIVITY_CLEAR_TOPFLAG_ACTIVITYY_SINGLE_TOP 标志。

在这里重复一遍很无聊,看看文档:

http://developer.android.com/guide/components/tasks-and-back-stack.html

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

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

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

当 Activity 即将显示时 - 但被销毁以回收资源 - 可以使用 onCreate() 方法中的 savedInstanceState 重新创建。你应该处理这种情况。大多数程序员不关心,这会导致屏幕旋转和长时间 inactivity.

后出现奇怪的错误

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

由于 Activity 破坏在正常情况下是相当不可预测的,Android 提供特殊的开发人员选项以 总是 在可能的情况下销毁活动。这使您可以毫不费力地正确处理 activity 生命周期周围的所有极端情况。探索您设备的开发者选项。

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

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