应用程序从深层链接启动,然后从启动器再次激活重新启动活动

Posted

技术标签:

【中文标题】应用程序从深层链接启动,然后从启动器再次激活重新启动活动【英文标题】:App started from deep link, then activated again from launcher restarts the activity 【发布时间】:2018-08-25 18:11:54 【问题描述】:

以下情况:

应用从深层链接 (sms) 启动并启动 MainActivity 用户在打开 SecondActivity 的应用中按下开始按钮 应用进入后台 用户在启动器中再次按下应用程序图标 => 我希望 SecondActivity 仍然处于活动状态。但相反,MainActivity 重新启动。

尝试使用“singleTop”活动模式 - 没有区别。

SecondActivity 是从 MainActivity 启动的,没有任何特殊的意图标志,简单的 startActivity()

<activity
    android:name=".MainActivity"
    android:label="@string/app_name"
    android:screenOrientation="portrait"
    android:alwaysRetainTaskState="true"
    android:launchMode="singleTop"
    android:windowSoftInputMode="adjustResize">
    <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”/>

【问题讨论】:

我可以看看你的manifest文件吗? 已更新清单文件 你可以试试lauchmode="singleTask"吗?不知道会解决我想说的一件事通常我们不会使用 startActivity() 启动启动器活动。 您可能会看到一个令人讨厌的 Android 错误。从主屏幕启动应用程序并按返回键后会发生什么?你现在看到SecondActivity了吗?还是应用程序直接退出? 你能否覆盖两个活动中的 onPause 和 onDestroy 生命周期事件,并在它们被调用时记录一条消息,如果 onDestroy 被调用,那么你的应用程序不会进入后台,它会被杀死解释为什么它重新启动应用程序。 【参考方案1】:

原来有两个原因:

    从深层链接启动应用程序创建了应用程序的单独实例 => 通过指定“singleTask”解决 SecondActivity 在某个时候被销毁,这解释了为什么从图标再次启动应用程序会带来 MainActivity 屏幕

感谢所有评论者的有用提示!

【讨论】:

好吧,我必须收回我在第 2 点上的话:我没有破坏 SecondActivity,它正在被操作系统破坏,我仍然不明白为什么【参考方案2】:

启动 secondActivity 时,您可以在 firstActivity 中调用 finish()(例如在 onPause()buttonClick() firstActivity 中)。这样,您的应用程序仍在运行(即 secondActivity)。当您启动应用程序时,secondActivity 应该直接运行(如果应用程序尚未完全销毁)。

【讨论】:

以上是关于应用程序从深层链接启动,然后从启动器再次激活重新启动活动的主要内容,如果未能解决你的问题,请参考以下文章

从深层链接启动时,我可以使用代码退出我的 android 应用程序吗?

有没有办法在应用程序已经运行时使用分支深层链接?

应用程序激活时呈现模态视图

如果应用程序通过深层链接打开,共享元素转换不起作用

如何区分 Firebase 动态链接的启动和安装?

通过关闭上面的所有活动(包括特定活动)再次从堆栈中间重新启动特定活动