通过不同意图访问时如何处理应用程序的多个实例

问题描述 投票:0回答:2

我刚刚添加了用户通过备份自定义文件类型在我的应用程序中恢复数据的功能。当使用我的应用程序从文件资源管理器打开文件时,我的根(主)活动将打开,但在一个新实例中。例如,如果我的应用程序已打开并且从文件资源管理器打开恢复文件,则我的应用程序的新实例将在我的根 Activity 中打开。在 Android 的任务管理器中,这看起来就像我的应用程序在文件资源管理器中运行,如果这有意义的话。由于恢复过程会更改用户数据,因此我的应用程序的原始实例可能会停止运行,因为它处于依赖于数据的活动中。

当通过像这样的不同意图访问应用程序时,如何防止应用程序的多个实例?谢谢。

更新:我已经四处寻找,但仍然找不到解决方案。如有帮助,我们将不胜感激。

清单中我的根活动的意图过滤器:

<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>
android android-intent android-activity android-manifest
2个回答
6
投票

当通过像这样的不同意图访问应用程序时,如何防止应用程序的多个实例?

您可以尝试在清单中的活动声明中使用 android:launchMode="singleTask"。如果您看到文档,它会说:

系统在新任务的根部创建活动并将意图路由到它。但是,如果该 Activity 的实例已存在,系统将通过调用其 onNewIntent() 方法将 Intent 路由到现有实例,而不是创建一个新实例。

这可能不会创建您在问题中提到的新实例。尝试一下。如果您仍然面临同样的问题,请告诉我。


0
投票

SingleTask 不适合我。然而,这有效:

android:launchMode="singleInstance"
© www.soinside.com 2019 - 2024. All rights reserved.