防止打开文件时应用程序/活动的多个实例

3
我有一个基于应用程序的活动。以下是问题。
  • 我创建了一个名为Instance1的活动实例。
  • 然后通过导航回到主屏幕将我的活动发送到后台。 Instance1上调用了onPauseonStop
  • 然后我导航到Gmail并打开一封邮件的附件。
  • 这将创建我的活动“Instance2”的新实例(我知道这是因为我会记录实例)。现在,我在我的活动中所做的任何事情都在这个新实例中进行。
  • 如果我然后导航离开并进入Gmail,则会在Instance2上调用onDestroy,然后如果我通过触摸图标打开我的应用程序,则会调用原始的Instance1onRestart

这里是我的manifest.xml中的意向筛选器。

<intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:mimeType="*/*" />
                <data android:pathPattern=".*\\.dog" />
</intent-filter>

我还在清单文件的应用程序标签中添加了以下内容,但没有效果。
android:launchMode="singleTask"

问题

为什么应用无法意识到有一个实例正在运行,并打开它?

补充说明

我使用了 singleInstance 并将其移到我的 Activity 标签中。但是,现在我无法获取我的电子邮件附件数据了?之前我使用了以下内容。

Intent intent = getIntent();

        if (intent != null) {
            Log.d("MainActivity","Intent not null");
            Uri u = intent.getData();
            if (u != null) {
                Log.d("MainActivity","URI not null");

你试过单个实例吗? - njzk2
你尝试过使用 android:launchMode="singleInstance" 吗? - ρяσѕρєя K
1个回答

1

launchMode标签是<activity>元素的一部分,而不是应用程序元素。

您应该使用singleTop来重复使用现有的活动。


单实例(singleInstance)已经生效,但是单顶部(singleTop)却没用。现在的问题是当我执行getIntent.getData();时,在我的onRestart方法中没有接收到附加数据? - StuStirling
onNewIntent 会被调用吗? - David Snabel-Caunt
那确实被调用了,意图也获得了数据。但现在读取 Gmail 时存在权限问题。我已添加了这些权限,但仍然无济于事。我讨厌 Android。你帮助我解决了我的原始问题和更多问题。谢谢。 - StuStirling
2
很棒啊。Android生命周期可能有点令人沮丧,但听起来你已经接近成功了,所以不要放弃!如果你解决不了权限问题,请尝试提出一个新的问题。 - David Snabel-Caunt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接