我有活动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
当我从片段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(),但这不起作用。我现在做什么?
答案 0 :(得分:1)
我很难向SO社区解释我的问题,更难理解问题来源但是一旦我跟踪了错误来源,它只花了几分钟来解决问题。
问题是由于活动中包含的布局(比如说x) 布局视图。 x的可见性是根据当前的情况决定的 分段。它在a3和View.GONE上可见其他两个片段。一世 从a1和a2中删除了该布局,问题解决了......
然而,我仍然无法理解它与B的onStop和onDestroy有什么关系,现在被称为完美...如果有人能找到,请分享..
希望这些信息可以对其他人有所帮助,