我对前台调度行为有一个烦人的问题。有时它不会调用onNewIntent()
,而是完全重新创建活动,这会破坏应用程序的工作流程。
我的具体情况:Activity A 是 MainActivity,它使用前台调度。一切正常。但是,在从浏览器(VIEW 操作)启动的活动 B 中,前台调度在某些情况下不再起作用。
工作流程:
我启动 MainActivity,切换到浏览器(不关闭 MainActivity),启动 Activity B 并附加我的 NFC 设备 --> 它创建了一个新的 Activity B。
我启动 MainActivity 并再次关闭它。之后我切换
到浏览器,启动活动 B 并附加我的 NFC 设备 --> 一切正常onNewIntent()
代码是正确的,例如,如果我在第一个场景中两次连接 NFC 设备,它会在第二次正常工作,但不是在第一次。在 MainActivity 和活动 BI 中,明确调用活动的 onPause() 方法中的 disableForegroundDispatch() 方法。
我的具体问题有解决方案吗?对我来说,这听起来像是一个错误。
编辑:
public void resume(Activity targetActivity) {
if (nfc != null && nfc.isEnabled()) {
// nfc is the default NFC adapter and never null on my devices
Intent intent = new Intent(targetActivity, targetActivity.getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(targetActivity, 0, intent, 0);
nfc.enableForegroundDispatch(targetActivity, pendingIntent, null, new String[][] { new String[] { IsoDep.class.getName() } });
}
}
public void pause(Activity targetActivity) {
if (nfc != null && nfc.isEnabled()) {
nfc.disableForegroundDispatch(targetActivity);
}
}
这些方法在每个活动的相应方法中被调用。谢谢您的帮助!
解决方案:经过很长时间的研究,我终于找到了问题所在。Logcat 打印:
- 从非活动上下文调用的 startActivity;强制 Intent.FLAG_ACTIVITY_NEW_TASK 用于:意图
我在 Stackoverflow 发现了其他问题,人们对 NotificationManager 也有同样的问题,但所有的提示都没有帮助我。将标志 singleTask 添加到我的活动 B 对我来说是诀窍,但老实说我不明白,因为上下文始终是一个活动。
我从 MainActivity 中删除了所有代码,第一个场景仍然不起作用。我从清单中删除了 MainActivity,之后一切都很好。也许这是一个问题,应用程序实例正在运行并且活动 B 从浏览器启动?我不知道。
无论如何,感谢NFC家伙的帮助!