我的Android应用程序在事件“ NDEF_DISCOVERED”上使用了意图过滤器(如果它包含某个URL)将其打开。 它工作正常,但我注意到,如果我将应用程序置于后台并点击NFC标签,则会启动该程序的新实例。如果执行几次,则会创建应用程序的多个实例。这给我带来了一些问题,因此我想找到一个解决方案,以便仅打开一个实例。
旁注:当我的程序在前台时,我在onResume中使用enableForegroundDispatch(),在onPause中使用disableForegroundDispatch()。很好。
当我的程序在后台并且点击NFC标签时,系统是否有办法检测到该程序已经启动并将其置于前台而不是启动新实例?
作为比较,如果我将程序放在后台,转到程序列表,然后单击我的程序,Android会检测到该程序已打开,并在不创建新实例的情况下恢复它(onCreate()在这种情况下,不会调用MainActivity。为什么我们在NFC事件中没有相同的行为,并且可能有相同的行为?
我已经阅读了该线程(Application receiving NFC always pops up new instance in front),这是相同的问题,但是并没有帮助我找到解决方案。
答案 0 :(得分:1)
我添加了:
android:launchMode="singleTask"
如here所示,并且确实有效。
如文档所述:(来源https://developer.android.com/guide/components/activities/tasks-and-back-stack)
“ singleTask”:
系统创建一个新任务并实例化 活动是新任务的根源。但是,如果 活动已经存在于单独的任务中,系统将 通过调用onNewIntent()来实现现有实例的意图 方法,而不是创建一个新实例。只有一个实例 活动可以一次存在。