为什么活动在从另一个活动的几个片段返回时挂起?

时间:2012-12-18 07:54:58

标签: android android-intent android-ui

我有活动A和B两个活动,活动A有3个片段,即a1,a2和a3。 a3是显示视频的默认选定片段,a2包含一个大的textView和一个小的edittext,a1包含一个listview。

现在在活动A的标题栏上我有一个按钮,因为它在标题栏上,所以从所有3个片段中都可以看到它。单击此按钮我使用以下功能打开活动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时,它会立即返回并且行为正常。

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

我试过更改意图的标志,但没有获得。

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

希望我解释这个问题,以防任何人需要代码的任何特定部分。请评论。我将编辑问题并添加。帮助家伙!!!

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

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

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

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

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

1 个答案:

答案 0 :(得分:1)

我很难向SO社区解释我的问题,更难理解问题来源但是一旦我跟踪了错误来源,它只花了几分钟来解决问题。

  

问题是由于活动中包含的布局(比如说x)   布局视图。 x的可见性是根据当前的情况决定的   分段。它在a3和View.GONE上可见其他两个片段。一世   从a1和a2中删除了该布局,问题解决了......

然而,我仍然无法理解它与B的onStop和onDestroy有什么关系,现在被称为完美...如果有人能找到,请分享..

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