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_TOP
或 FLAG_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 生命周期周围的所有极端情况。探索您设备的开发者选项。
您可能想查看这些文章以了解有关该主题的更多信息:
- http://developer.android.com/training/basics/activity-lifecycle/index.html
- http://developer.android.com/training/basics/activity-lifecycle/recreating.html
回到您关于单击按钮 50 次的问题...它可能会创建 50 个 activity 实例,它们相互堆叠。可能 Android 开始销毁第一个活动以为新活动腾出内存空间。假设该设备只有 49 个活动的内存。你开始 49 - 所有都保存在内存中。你从第 50 个开始,第 1 个将被摧毁。她的状态保存在 Bundle
中,所以当您按回 49 次时,第一个将从这个保存的包中重新创建。
我想知道一件简单的事情。我正在制作一个 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_TOP
或 FLAG_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 生命周期周围的所有极端情况。探索您设备的开发者选项。
您可能想查看这些文章以了解有关该主题的更多信息:
- http://developer.android.com/training/basics/activity-lifecycle/index.html
- http://developer.android.com/training/basics/activity-lifecycle/recreating.html
回到您关于单击按钮 50 次的问题...它可能会创建 50 个 activity 实例,它们相互堆叠。可能 Android 开始销毁第一个活动以为新活动腾出内存空间。假设该设备只有 49 个活动的内存。你开始 49 - 所有都保存在内存中。你从第 50 个开始,第 1 个将被摧毁。她的状态保存在 Bundle
中,所以当您按回 49 次时,第一个将从这个保存的包中重新创建。