我有3个活动LandingActivity-> LoginActivity-> MainActivity 我在登陆活动中有一个登录按钮,该按钮启动LoginActivity,成功登录后将我带到MainActivity,我清除了LoginActivity中的任务,因此当我在MainActivity上按返回按钮时,该应用程序将返回backroung,因为它是任务的根源,问题是当我从LandingActivity开始恢复时,如何解决使它从MainActivity恢复
AndroidManifest
<activity android:name=".activity.LandingActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".activity.MainActivity"/>
<activity android:name=".activity.SignUpActivity"/>
<activity android:name=".activity.LoginActivity"/>
登录按钮中使用的意图
val intent = Intent(this, MainActivity::class.java)
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK )
startActivity(intent)
答案 0 :(得分:2)
当堆栈中没有活动时,例如,如果您按回去直到回到家,然后单击启动器图标,则无论最后打开了什么活动,它始终将使用启动器意图过滤器启动活动。或应用程序进程是否仍然存在。正如@TheHebrewHammer所建议的那样,要解决此问题,您的LandingActivity可以基于已保存的数据和启动活动充当导航决策树。您可以在Google I / O Schedule App here
中查看Google如何处理类似的操作或者,如果您的LandingActivity并没有显示太多的UI,而只是作为其他活动的提示,您可以通过声明MainActivity为启动器并检查登录会话来避免大多数情况下的多个活动,如下所示:
override fun onCreate(savedInstanceState: Bundle?) {
if (!isUserLoggedIn()) {
val intent = Intent(this, LoginActivity::class.java)
startActivity(intent)
finish()
return
}
// continue as normal
}
如果在大多数情况下登录会话,则大多数情况下您只会启动一个活动,在某些情况下,您不需要通过LauncherActivity的意图数据传递信息。