首页 > 解决方案 > NFC Tag 轻触时创建的新程序实例

问题描述

如果事件“NDEF_DISCOVERED”包含某个 URL,我的 Android 应用程序正在使用意图过滤器来打开它。它工作正常,但我注意到,如果我将应用程序置于后台并点击 NFC 标签,则会启动该程序的一个新实例。如果我这样做几次,我会创建我的应用程序的几个实例。这给我带来了一些问题,所以我想找到一个解决方案,以便只打开一个实例。

旁注:当我的程序处于前台时,我在 onResume 中使用 enableForegroundDispatch(),在 onPause 中使用 disableForegroundDispatch()。它工作正常。

当我的程序在后台并且当我点击 NFC 标签时,系统是否可以检测到程序已经启动并将其置于前台而不是启动新实例?

作为比较,如果我将我的程序置于后台,转到程序列表并单击我的程序,Android 会检测到该程序已打开并在不创建新实例的情况下恢复它(MainActivity 的 onCreate() 不是在这种情况下调用)。为什么我们对 NFC 事件没有相同的行为,是否有可能有相同的行为?

我已经阅读了这个线程(应用程序接收 NFC 总是在前面弹出新实例)这是同一个问题,但它并没有帮助我找到解决方案。

标签: androidandroid-intentnfc

解决方案


我已经添加了:

android:launchMode="singleTask"

如此处所示它确实有效。

正如文档所说:(来源https://developer.android.com/guide/components/activities/tasks-and-back-stack

“单任务”:

系统创建一个新任务并在新任务的根部实例化活动。但是,如果活动的实例已经存在于单独的任务中,系统将通过调用其 onNewIntent() 方法将意图路由到现有实例,而不是创建新实例。一次只能存在一个活动实例。


推荐阅读