【问题标题】:Pausing/Resuming Activity outside of an activity在活动之外暂停/恢复活动
【发布时间】:2014-09-09 12:17:59
【问题描述】:

我有 2 项活动。主要活动A和活动B 我不希望活动 A 破坏。我正在一项新任务中启动 Activity 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”,反之亦然,当我不需要它们时,它们都在后台。

【问题讨论】:

  • 你想让它们在后台做什么?
  • 检查 Intent 标志...这将解决您的问题。

标签: android android-intent android-activity


【解决方案1】:

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

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

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

Your app will be in the background, onResume and onPause will both be called,前提是操作系统有足够的内存来保存新应用和所有旧应用。

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

  • 如果您需要用户以相同的状态返回应用程序,请在用户返回时you need to do the work in onResume and onPause to save the state information and initialize your UI again。如果您真的担心它会被杀死(好吧,我认为它不应该丢失捆绑包),您可以将它们存储在您的应用程序的 SharePreferences 中。

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      当你使用任务时,清理是非常重要的。您需要清理活动中的所有任务。 readthis

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

      【讨论】:

      • 你好。感谢您编辑我的帖子。我的帖子背后的想法是,我正在开发一个运行 Android 的嵌入式系统。没有“BACK”按钮,活动之间的更改由 GPIO 完成。 GPIO 为 0 或 1 时,活动发生变化。在我的应用程序中,我有另一个类读取 GPIO 值并根据它们的值执行某些功能。我在原始帖子中发布的功能之一。我想知道的是天气可以让这两个活动保持“活跃”并且只是在背景/前景之间切换。
      • 不,你不能。我给你两个可能的选择:1)你可以使用片段来改变 UI 并保持活动,活动从 GPIO 接收回调。 2) 创建一个单例,其中包含对 GPIO 更改的侦听器的引用。每个活动都实现了监听器接口和 onPause/onResume 注册/注销自己作为新的监听器。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-27
      • 1970-01-01
      • 2012-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-10
      相关资源
      最近更新 更多