活动的onCreate方法始终使用启动模式“ singleTask”进行调用

时间:2018-10-08 12:52:08

标签: android android-activity deep-linking branch.io android-deep-link

我在应用程序中使用Branch IO,根据他们的documentation,我在活动中使用android:launchMode="singleTask"

这是我的AndroidManifest的一些代码段。

        <activity
        android:name=".SplashScreen"
        android:launchMode="singleTask"
        android:screenOrientation="portrait"
        android:windowSoftInputMode="stateAlwaysHidden|adjustPan">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
        <intent-filter>
            <data
                android:host="open"
                android:scheme="com.package.name" />

            <action android:name="android.intent.action.VIEW" />

            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
        </intent-filter>

        <!-- Branch App Links (optional) -->
        <intent-filter android:autoVerify="true">
            <action android:name="android.intent.action.VIEW" />

            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />

            <data
                android:host="app.link"
                android:scheme="https" />
            <!-- <data android:scheme="https" android:host="example-alternate.app.link" /> -->
        </intent-filter>
    </activity>

一切正常,除了当我在使用应用程序时按下主屏幕按钮并点击应用程序/启动器图标时,将启动Splash屏幕活动的onCreate方法,这使其看起来像是从头启动了应用程序。但是,如果我在使用某个应用程序时按下主页按钮并从最近的应用程序中打开它,则不会调用onCreate,并且一切正常。

当从最近使用的应用程序和“应用程序/启动器”图标中出现时,如何使应用程序行为保持一致?

我尝试删除singleTask启动模式,该模式使从App / Launcher图标和最新的应用程序完美启动,但是在分支IO链接上点击时,将创建一个新的应用程序实例。我可以理解,要克服此问题,只有他们要求将singleTask置于启动模式。

我已经在许多使用深层链接的应用程序中检查了这种情况,但它们没有此问题!

我一定在做我看不见的错误。

是否缺少某些东西或实现错误?

1 个答案:

答案 0 :(得分:0)

此问题的解决方案正在转向单一活动架构。 由于启动活动是singleTask,因此每次将应用程序从启动器图标置于前台时都会调用它的onStart方法。必须在onStart方法中编写路由逻辑,当从此处启动另一个活动时,应用程序状态将丢失。 如果只有一个活动,则不会出现此问题。但是,将不得不处理令人讨厌的片段堆栈。这不是一个简单但正确的方法。

要快速解决此问题,可以在启动模式的onCreate活动方法中将这段代码与singleTask一起使用。

        if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0) {
           return;
        }

这可能有助于避免不必要地执行用onCreate编写的代码。但是,这是推荐的解决方案,因为它不能解决问题的根本原因。