我有两个活动活动 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();
}
}
在 BI 内部称其为setResult(ResultCode) and finish()
. 现在我从片段 a1 和 a2 开始 B时有两个问题,
1. B 在返回 A 之前花费了太多时间(即在按下后退按钮或完成 B 的工作之后),2. 返回后它不显示任何对话框,直到我导航到其他片段或我旋转设备,一旦我这样做,它就会开始正常且令人惊讶地表现,
当我从片段 a3 启动活动 B 时,它会立即返回并正常运行。
我已经尝试覆盖这些片段的所有生命周期方法,并将日志语句放在每个方法中。痛苦是这两种情况的方法调用顺序是正常且相同的。
我曾尝试更改意图的标志,但没有任何收获。
我android:configChanges="keyboardHidden|orientation"
为我的应用程序的所有活动添加了 falg。
希望我解释了这个问题,以防有人需要代码的任何特定部分。请发表评论。我将编辑问题并添加。帮助各位!!!
编辑 我在 GingerBread 2.3.6 中测试它没有工作,但我只是在运行 JellyBean 的模拟器上检查了它,它工作正常。看起来问题与操作系统版本有关。任何的想法 ?
编辑 2 一个重要的观察点是,当在 BI 中按下后退按钮时,几毫秒后,将调用 Previous Activity 的 onResume() 及其片段。但即使在 B 出现在屏幕上一段时间之后,电话似乎也挂了几秒钟......
编辑 3 刚知道当我从片段 a1 或 a2 启动 B 时,不会调用 B 的 onStop() 和 OnDestroy()。然而,当我在 a3 上时,它们被完美地调用。这可能是什么原因?
该文档说“活动的可见生命周期发生在对 onStart() 的调用与对 onStop() 的相应调用之间。在此期间,用户可以在屏幕上看到该活动,尽管它可能不在前台并且与用户互动。”
由于不能保证 onStop() 活动在不被调用时行为异常。我也开始知道在 HoneyComb+ 设备中它总是被调用。我曾尝试在 onPause() 内调用 onStop() 但这不起作用。我现在应该做什么 ?