Android:清除堆栈后如何从上一个活动恢复

时间:2018-09-14 00:29:11

标签: android android-intent android-activity android-lifecycle

我有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)

1 个答案:

答案 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的意图数据传递信息。