应用程序从深层链接启动,然后从启动器再次激活重新启动活动
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 应该直接运行(如果应用程序尚未完全销毁)。
【讨论】:
以上是关于应用程序从深层链接启动,然后从启动器再次激活重新启动活动的主要内容,如果未能解决你的问题,请参考以下文章