【问题标题】:New program instance created when NFC Tag tappedNFC Tag 轻触时创建的新程序实例
【发布时间】:2018-11-14 15:39:02
【问题描述】:

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

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

当我的程序在后台并且当我点击一个 NFC 标签时,有没有办法让系统检测到程序已经启动并将其置于前台而不是启动一个新实例?

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

我已经阅读了这个帖子 (Application receiving NFC always pops up new instance in front),这是同一个问题,但它并没有帮助我找到解决方案。

【问题讨论】:

    标签: android android-intent nfc


    【解决方案1】:

    我已添加:

    android:launchMode="singleTask"
    

    here 所示,它确实有效。

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

    “单一任务”:

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

    【讨论】:

      猜你喜欢
      • 2021-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-01
      • 1970-01-01
      相关资源
      最近更新 更多