【问题标题】:Android: Background Activity not visibleAndroid:后台活动不可见
【发布时间】:2013-10-30 10:13:56
【问题描述】:

我有一个Activity A,它启动一个Activity B(对话主题),其中Activity A 在后台可见,B 在前台可见。

但是,当按下主页按钮然后再次返回应用程序时,A 不再可见 - 只有 B。 B 的onResume() 被调用,而不是A 的调用,这也许应该是这样的......

A 中的onDestroy() 没有被调用,正如我所见。这种行为的原因可能是什么?

A 定义为 singleInstance MAIN/LAUNCHER Activity 并通过 SettingsActivity.show 启动 B

public static void show(final Context context, final boolean inRegisterFlow) {
    final Intent intent = new Intent(context, SettingsActivity.class);
    context.startActivity(intent);
}

【问题讨论】:

  • 您能否发布您的代码。
  • 发布您的清单。问题是您使用了launchMode singeInstance。你为什么用那个?它产生的问题多于它解决的问题(通常)。

标签: android android-activity activity-lifecycle


【解决方案1】:

问题在于您使用了launchMode="singleInstance'。如果 ActivityA 是用launchMode="singleInstance" 定义的,那么当 ActivityA 启动 ActivityB 时,ActivityB 会以不同的任务结束。当用户按下 BACK 按钮时,两个任务(包含 ActivityA 的任务和包含 ActivityB 的任务)都会在后台结束。当用户将包含ActivityB的任务带到前台时,另一个任务(包含ActivityA)仍在后台。

您的架构听起来很糟糕。如果你想让它表现得像一个对话框,你为什么要启动一个以对话框为主题的活动?为什么不在 ActivityA 中显示一个对话框?你为什么使用launchMode="singleInstance"?一般来说,这是错误的(除非您正在开发主屏幕替换),而且它通常会产生比它解决的问题更多的问题,因为大多数开发人员并不真正了解它是如何工作的。

此外,onResume() 在 ActivityB 上被调用,因为它已恢复(即:它在前台)。 onResume() 不会在 ActivityA 上调用,因为该活动不在前台。只有 1 个活动处于“恢复状态”。所有其他活动都“暂停”。

【讨论】:

  • 谢谢!将 launchMode 更改为“singleTop”(或者我什至应该使用“正常”吗?),我不知道为什么将其设置为 singleInstance,因为我没有从头开始开发应用程序。无论如何,这解决了我的问题!
【解决方案2】:

也许这里有一个快速修复,将 A.onResume() 添加到 onResume() 实现中,这是因为当你回来时,A 在后台没有恢复。

但这只是一个糟糕的方法

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多