在我的应用程序中,Activity1使用"startActivityForResult()"启动Activity2。
Activity2完成后,将调用以下代码:
Activity2.java
private void finishActivity(final boolean accepted)
{
Intent returnIntent = new Intent();
setResult(accepted ? RESULT_OK : RESULT_CANCELED, returnIntent);
finish();
}
Activity1接收此回调,如果结果不是result_OK,它也会结束。
Activity1.java
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == Globals.REQUEST_CODE_TOS)
{
if (resultCode != RESULT_OK)
finish();
}
}
Activity1完成后,应用程序将按预期关闭。
问题——
然而,在我的应用程序关闭后,堆栈上的前一个应用程序不是进入主屏幕,而是短暂地向前启动,然后也关闭!然后我进入主屏幕。
在Android错误跟踪器中,我看到了一个类似的错误,列出了按下后退按钮时的情况,我认为这与调用finish()相同:
https://code.google.com/p/android/issues/detail?id=71067
我在运行4.4.4的Nexus 5上看到了这一点。
这只是一个bug吗?或者这种行为有什么变通办法吗?
编辑--
澄清我想要的行为:
在谷歌地图中,如果你拒绝TOS弹出窗口,应用程序将关闭,你将直接进入主屏幕。之前打开的一些应用程序没有尴尬的闪光。
这显然与您在问题中联系的问题相同(我已经关注了几个月,因为我自己也拥有Nexus 5)。它实际上在AOSP中得到了修复,但这个特定的修复似乎还没有进入N5。我已经为棒棒糖的修复祈祷了,但我们拭目以待。
至于变通方法,我认为目前还不存在,尽管如果我错了,我很想知道——我自己开发了一个类似的应用程序(当通过后退按钮关闭时,手动将finish()
称为堆栈中最底层的活动)。
可能是通过setResult()
返回的空Intent。你在这里试过null
吗?