【发布时间】: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