0

我有 2 个活动。主要活动 A 和活动 B 我不希望活动 A 破坏。我正在一项新任务中启动活动 B。

public static void startActivity(Class<?> startClass) {
    Intent intent = new Intent(Constants.getActivity(), startClass);
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    Constants.getActivity().startActivity(intent);
}`
  • Constants.getActivity() 返回当前活动的上下文
  • startClass 是活动“A”或活动“B”

事情是他们创建/破坏活动并且他们泄漏。我做错了吗?当我不需要它们时,如何从活动“A”开始活动“B”,反之亦然。

4

3 回答 3

0

使用任务时,清理非常重要。您需要清理活动中的所有任务。读这个

如果活动没有很多疯狂的初始化,只需使用finish和onCreates。否则请注意,当您在活动之间切换时,将经常调用 onResume。清理在这里至关重要。如果您不进行清理,则您的一个活动(具有来自另一个已清理活动的死对象引用)可能会从活动堆栈中恢复并引发异常。调试这种异常非常困难。

于 2012-10-19T07:49:44.020 回答
0

首先,你想做什么?您应该始终将您想要在后台执行的操作与您的 UI 分开。认为您的活动只是一个显示 UI 的容器,其他所有内容都可以从持久存储或保存的实例包中存储和恢复。

在这里了解 Activity 生命周期和 Service 生命周期之间的区别非常重要。

我将在这里参考另一个问题的答案:

您的应用程序将在后台运行,onResume 和 onPause 都将被调用,前提是操作系统有足够的内存来保存新应用程序和所有旧应用程序。

  • 如果您需要一个长时间运行的进程,而用户没有查看它,请使用服务。

  • 如果您需要用户以相同的状态返回应用程序,您需要在 onResume 和 onPause 中进行工作以保存状态信息并在用户返回时再次初始化您的 UI。如果您真的担心它会被杀死(好吧,我认为它不应该丢失捆绑包),您可以将它们存储在您的应用程序的 SharePreferences 中。

  • 如果您想知道应用程序何时从该特定共享意图返回,请使用 startActivityForResult

于 2012-10-19T07:57:36.090 回答
0

你不能像你说的那样让一个活动“活着”。当一个 Activity 暂停时,Android 系统总是能够随时申请它的内存并卸载它。

但是如果你想从 A 切换到 B,那么 A 和 B 可能是单个活动中的不同视图。也许你会想看看http://developer.android.com/reference/android/widget/ViewFlipper.html

于 2012-10-19T08:06:14.670 回答