NSo*_*uth 6 android android-manifest android-intent android-activity
我刚刚添加了用户通过备份自定义文件类型来恢复我的应用程序中的数据的功能.使用我的应用程序从文件资源管理器打开文件时,将打开我的根(主)活动,但是在新实例中.例如,如果我的应用程序已打开并且从文件资源管理器打开了还原文件,则我的应用程序的新实例将在我的根活动中打开.在android的任务管理器中,这看起来像我的应用程序在文件浏览器中运行,如果这是有道理的.由于还原过程会更改用户数据,因此我的应用程序的原始实例可能会停止运行,因为它位于数据相关的活动中.
当通过不同的意图访问我的应用程序时,如何阻止我的应用程序的多个实例?谢谢.
更新:我已经搜索过,但仍无法找到解决方案.帮助将不胜感激.
对清单中的根活动进行intent-filter:
<manifest
android:launchMode="singleInstance"
...
<application
android:... >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="file" android:pathPattern=".*\\.grdcsv" android:mimeType="*/*" android:host="*"/>
</intent-filter>
<!-- For email attachments -->
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="application/octet-stream" android:pathPattern=".*\\.grdcsv" android:scheme="content" />
</intent-filter>
Run Code Online (Sandbox Code Playgroud)
当通过像这样的不同意图访问应用程序时,如何防止应用程序的多个实例?
您可以尝试在清单的活动声明中使用android:launchMode="singleTask" 。如果您看到文档,它会说:
系统在新任务的根部创建活动并将意图路由到它。但是,如果该活动的实例已存在,系统将通过调用其 onNewIntent() 方法将 Intent 路由到现有实例,而不是创建一个新实例。
正如您在问题中提到的那样,这可能不会创建新实例。尝试一下。如果您仍然面临同样的问题,请告诉我。