【问题标题】:Why Activity is hanging while coming back from another activity's few fragments?为什么 Activity 在从另一个 Activity 的几个片段返回时挂起?
【发布时间】:2012-12-18 07:54:57
【问题描述】:

我有两个活动活动 A 和 B,活动 A 有 3 个片段,即 a1、a2 和 a3。 a3 是显示视频的默认选定片段,a2 包含一个大文本视图和一个小的编辑文本,a1 包含一个列表视图。

现在在活动 A 的标题栏上,我有一个按钮,因为它位于标题栏上,所以从所有 3 个片段中都可以看到它。此按钮的 OnClick 我使用以下功能打开 Activity B。

public void inviteUser() {
    if ( getUserType() == ACTIVE ) {
        Intent intent = new Intent(this, B.class);
        intent.putExtra(Constants.MEETING_ID, (long) session.getSessionId());
        intent.putExtra(Constants.INVITE_FROM_SESSION, true);
        intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_ACTIVITY_SINGLE_TOP);
        this.startActivityForResult(intent, RESULT_OK);
    } else {
        Toast.makeText(this, getString(R.string.strNotAPresenterMsg), Toast.LENGTH_LONG).show();
    }
}

在 B 内部,我称之为setResult(ResultCode) and finish()。现在,当我从片段 a1 和 a2 开始 B 时,我有 两个问题

1。 B 在返回 A 之前花费了太多时间(即在按下后退按钮或完成 B 的工作之后),2. 返回后它不会显示任何对话框,直到我导航到其他片段或旋转设备,一旦我这样做了,它就会开始正常且令人惊讶地表现,

当我从片段 a3 开始活动 B, 它立即返回并正常运行。

我已经尝试覆盖这些片段的所有生命周期方法,并将日志语句放在每个方法中。痛苦是这两种情况的方法调用顺序是正常且相同的。

我尝试更改意图的标志,但没有任何收获。

我为我的应用程序的所有活动添加了 falg android:configChanges="keyboardHidden|orientation"

希望我解释了问题,以防有人需要代码的任何特定部分。请发表评论。我将编辑问题并添加。救命啊!!!

编辑 我在 GingerBread 2.3.6 中测试它没有工作,但我只是在运行 JellyBean 的模拟器上检查了它,它工作正常。看起来问题与操作系统版本有关。有什么想法吗?

编辑 2 一个重要的观察点是,当我在 B 中按下后退按钮时,几毫秒后,将调用 Previous Activity 的 onResume() 及其片段。但即使在 B 出现在屏幕上一段时间之后,这似乎电话挂了几秒钟......

编辑 3 刚刚知道当我从片段 a1 或 a2 启动 B 时,不会调用 B 的 onStop() 和 OnDestroy() 。然而,当我在 a3 上时,它们被完美地调用。这可能是什么原因?

文档说“活动的可见生命周期发生在对 onStart() 的调用与对 onStop() 的相应调用之间。在此期间,用户可以在屏幕上看到活动,尽管它可能不在前台并与用户交互。”

由于不能保证 onStop() 活动在不被调用时行为异常。我也开始知道在 HoneyComb+ 设备中它总是被调用。我曾尝试在 onPause() 内调用 onStop() 但这不起作用。我现在做什么?

【问题讨论】:

  • 你在onActivityResult做什么?也许您在来自活动B 时加载了额外的数据?
  • 更重要的是,a1 和 a2 的onResume
  • @SherifelKhatib OnResume of a1 和 a2 只有打印语句。
  • @Luksprog,我检查了 onActivityResult() 中的结果代码,但在此之前我打印了一条消息,但该消息从未打印过。不管我如何完成这项活动。
  • 您如何在活动 A 中恢复 fragments?会不会是您通过 ActivityA 的onCreate() 完全从头开始重建它们? ActivityA 第一次加载需要多长时间?

标签: android android-intent android-ui


【解决方案1】:

对我来说,向 SO 社区解释我的问题真的很困难,更难的是理解问题的根源,但是一旦我跟踪了错误的来源,只需要几分钟就可以解决问题。

问题是由于 Activity 中包含的布局(比如 x) 布局视图。 x 的可见性取决于当前 分段。它在 a3 和 View.GONE 上可见于其他两个片段。我 从 a1 和 a2 中删除该布局,问题就解决了……

但是我仍然无法理解它与 B 的 onStop 和 onDestroy 有什么关系,它们现在被完美地调用...如果有人能找到,请分享..

希望这些信息对其他人有所帮助,

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-22
    • 1970-01-01
    • 2014-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-28
    相关资源
    最近更新 更多