android - NFC Tag 轻触时创建的新程序实例
问题描述
如果事件“NDEF_DISCOVERED”包含某个 URL,我的 Android 应用程序正在使用意图过滤器来打开它。它工作正常,但我注意到,如果我将应用程序置于后台并点击 NFC 标签,则会启动该程序的一个新实例。如果我这样做几次,我会创建我的应用程序的几个实例。这给我带来了一些问题,所以我想找到一个解决方案,以便只打开一个实例。
旁注:当我的程序处于前台时,我在 onResume 中使用 enableForegroundDispatch(),在 onPause 中使用 disableForegroundDispatch()。它工作正常。
当我的程序在后台并且当我点击 NFC 标签时,系统是否可以检测到程序已经启动并将其置于前台而不是启动新实例?
作为比较,如果我将我的程序置于后台,转到程序列表并单击我的程序,Android 会检测到该程序已打开并在不创建新实例的情况下恢复它(MainActivity 的 onCreate() 不是在这种情况下调用)。为什么我们对 NFC 事件没有相同的行为,是否有可能有相同的行为?
我已经阅读了这个线程(应用程序接收 NFC 总是在前面弹出新实例)这是同一个问题,但它并没有帮助我找到解决方案。
解决方案
我已经添加了:
android:launchMode="singleTask"
如此处所示,它确实有效。
正如文档所说:(来源https://developer.android.com/guide/components/activities/tasks-and-back-stack)
“单任务”:
系统创建一个新任务并在新任务的根部实例化活动。但是,如果活动的实例已经存在于单独的任务中,系统将通过调用其 onNewIntent() 方法将意图路由到现有实例,而不是创建新实例。一次只能存在一个活动实例。
推荐阅读
- python - 如何将 python 模块创建为单个可调用函数?
- python - 如何在python中创建表格以按列读取二维数组
- python - 当 data 参数包含 & 时如何发出 HTTP POST 请求?
- c# - Microsoft Identtiy & Identity Server 4 处理流程关系
- java - 为什么我只使用 geofirestore 获得一份文件
- graph - 单个查询中的 Cypher 遍历树
- testng-eclipse - TestNG 与 Eclipse 2019-03 不兼容
- laravel - 无法将请求参数注入刀片视图文件
- c++ - 这个 for 循环是如何终止的?
- excel - Excel VBA查找列中的最后一个非空白单元格并将其转换为值