
在我们开发的过程中,肯定会遇到登录问题,在登录界面点击忘记密码,然后再找回密码,找回密码成功之后就可以直接进入主界面了,此时你就需要将栈中所有Activity清空,否则你的返回键,还是会回到之前的界面。你会怎么做呢?
以下是我的代码:
Intent intent = new Intent(this,MaintActivity.class).setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
参数讲解:
FLAG_ACTIVITY_CLEAR_TASK:
这个标志将会清除之前所有已经打开的activity.然后将会变成另外一个空栈的root,然后其他的Activitys就都被关闭了
FLAG_ACTIVITY_NEW_TASK:
当Intent对象包含这个标记时,系统会寻找或创建一个新的task来放置目标Activity,寻找时依据目标Activity的taskAffinity属性进行匹配,如果找到一个task的taskAffinity与之相同,就将目标Activity压入此task中,如果查找无果,则创建一个新的task,并将该task的taskAffinity设置为目标Activity的taskActivity,将目标Activity放置于此task。注意,如果同一个应用中Activity的taskAffinity都使用默认值或都设置相同值时,应用内的Activity之间的跳转使用这个标记是没有意义的,因为当前应用task就是目标Activity最好的宿主.
跳转白屏问题
你这样做可能还会出现另外一个问题,那就是发现跳转的界面不是那么漂亮,中间会有黑屏或者白屏的过渡,对于我这种强迫症是接受不了的,以下是我的解决方法:
在AndroidManifest.xml中添加 android:theme="@style/AppTheme"
<application
android:name=".BaseApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:screenOrientation="portrait"
android:supportsRtl="true"
android:theme="@style/AppTheme"> <!--为了解决白屏问题-->
然后在styles.xml中增加属性
<item name="android:windowDisablePreview">true</item>
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:windowAnimationStyle">@style/WindowAnimationStyle</item>
<item name="colorAccent">@color/accent</item>
<item name="colorControlNormal">@color/alpha_white</item>
<item name="colorPrimary">@color/primary</item>
<item name="colorPrimaryDark">@color/primary_dark</item>
<!--为了解决白屏问题-->
<item name="android:windowDisablePreview">true</item>
</style>
通过设置android:windowDisablePreview属性,禁用窗口的预览动画,
在MainActivity显示之前,系统永远不会使用窗口的主题来显示它的预览,这也保证了不会出现白屏或者黑屏。但是,如果在MainActivity启动的时候,有过多复杂的操作,就会出现在手机中点击了应用程序的图标,但过两秒才会打开应用程序不好的卡顿体验效果。