这里很奇怪。
我最初有一个活动是启动活动(活动A)。它关联了标记android:launchMode="singleTask"
。没有问题。我的需求发生了变化,现在我将活动B作为启动活动。我复制了intent过滤器,将名称更改为".ActivityB",并将启动模式标记也移到了上面。
它似乎运行良好;当我启动应用程序时,我会转到活动B。然而,当我从活动B转到活动A,然后单击后退按钮时,应用程序退出,不会重新打开(如果我没有启动模式标签,它会重新打开。)
另一个例子。如果我从活动A到活动B再到活动A再到活动B,一切都很好。当我点击返回时,我会转到活动A(如预期),但当我再次点击返回时我会转到前一个活动A实例(嗯哦),然后我再次点击并退出应用程序。两次都跳过活动B.
我显然忽略了什么,但我不知道是什么。我没有覆盖任何后退按钮功能,在我切换启动活动之前,一切都很顺利。
编辑以下是我在更改之前的清单摘录
<activity android:name=".ActivityA" android:windowSoftInputMode="stateHidden" android:label="@string/app_name" android:launchMode="singleTask">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="ActivityB"></activity>
以下是更改后的摘录
<activity android:name=".ActivityB" android:windowSoftInputMode="stateHidden" android:label="@string/app_name" android:launchMode="singleTask">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="ActivityA"></activity>
听起来像是活动B被调用了finish()
之类的。我建议在OnCreate
、OnPause
、OnResume
和OnDestroy
中放入一些日志语句,这样您就可以监控活动B的寿命。这是一个高地活动(只能有1个),因此您不必担心创建多个实例。此外,您还可以查看/覆盖onNewIntent
,并在那里进行一些日志记录调用。
这并不是一个真正的答案,但当你或某人在开始活动a后打了finish()
电话,或者当活动B在后台进行时,你已经忘记了这件事,你会得到美元。
如果不是这样的话,我会对活动B如何/何时结束感兴趣。通常,如果它在返回时因为一些错误而停止,Android会对你咆哮,但由于你没有提到这一点,我想它不是。