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

时间:2014-11-24 03:21:59

标签: android android-intent android-activity android-manifest

我刚刚添加了用户通过备份自定义文件类型在我的应用中恢复其数据的功能。使用我的应用程序从文件资源管理器打开文件时,我的根(主)活动将打开,但在新实例中。例如,如果我的应用程序已打开并且从文件资源管理器打开了还原文件,则我的应用程序的新实例将在我的根活动中打开。在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>

1 个答案:

答案 0 :(得分:4)

  

当通过不同的意图访问我的应用时,如何阻止我的应用的多个实例?

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

  

系统在新任务的根目录下创建活动并将意图路由到该任务。但是,如果活动的实例已经存在,系统会通过调用onNewIntent()方法将意图路由到现有实例,而不是创建新实例。

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