首页 文章

Android Deep链接和singleInstance / singleTask

提问于
浏览
2

可能重复Deep linking and multiple app instances . 我在我的应用中实现了深层链接 . 我有启动器的Splash活动和处理清单中定义的Intent的MainActivity:

<application
    android:name=".MyApplication"
    android:allowBackup="true"
    android:fullBackupContent="true"
    android:icon="@drawable/app_logo"
    android:label="@string/app_name"
    android:largeHeap="true"
    android:theme="@style/AppTheme">

    <activity
        android:name=".ActivitySplash"
        android:configChanges="orientation|screenSize"
        android:label="@string/app_name">
        <intent-filter>
            <!-- Launcher activity -->
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <activity
        android:name=".ActivityMain"
        android:alwaysRetainTaskState="true"
        android:configChanges="orientation|screenSize"
        android:exported="true"
        android:label="@string/app_name"
        android:launchMode="singleTask"
        android:windowSoftInputMode="adjustResize">
        <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:host="www.mywebsite.com"
              android:pathPrefix="/something"
              android:scheme="http" />
        </intent-filter>
    </activity>
   <activity
        android:name=".ActivitySignIn"
        android:configChanges="screenSize|orientation" />
   <activity android:name=".ActivitySignUp" />
</application>

我已将启动模式singleTask设置为处理onNewIntent() . 现在我想要实现的是,如果用户从DeepLinking打开活动并且MainActivity中已经有一些任务,我提示用户一个对话框要么取消当前任务又要开始新任务(来自深层链接) . 问题是如果我从MainActivity打开另一个活动,用户来自DeepLinking Intent . 然后它会杀死第二个活动并直接打开MainActivity . 我想要实现的是,如果app / activity未运行,则DeepLink中的Intent按原样打开 . 如果activity / app已经运行,那么我会提示用户关闭当前任务并执行DeepLink任务/意图 .

1 回答

  • 0

    这并不像你想象的那样真正起作用 . 您正在尝试使用 launchMode="singleTask" ,但由于您还没有设置"taskAffinity",Android几乎忽略了您的 launchMode .

    您不需要使用特殊启动模式“singleTask”或“singleInstance”来获得您想要的任何内容 .

    尝试使用 singleTop 启动模式,看看这是否解决了您的问题 . 如果 ActivityMain 已经打开并且您使用深层链接再次启动 ActivityMain ,则应在 ActivityMain 中调用 onNewIntent() .

    您还可以查看my answer to this question,它描述了一种确定 Activity 基于使用 static 变量来确定是否另一个 Activity 是否在堆栈中的方法 .

相关问题