意图重定向之前,Android应用显示白屏

时间:2018-09-03 18:20:27

标签: android session android-intent

在MainActiivity上,检查已存储的会话并重定向到SecondActivity。我期望的是,仅对会话存储的用户显示SecondActivity,但是在几秒钟内出现白屏并重定向到SecondActivity。我的onCreate方法如下

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        session= new Session(MainActivity.this);
        if(session.getData("auth").equals("true")){
            Intent i= new Intent(MainActivity.this,SecondActivity.class);
            i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
            startActivity(i);
            finish();
        }else{
             setContentView(R.layout.activity_main);
            }
}

2 个答案:

答案 0 :(得分:1)

仅通过禁用以下样式的窗口预览即可解决问题

    <item name="android:windowDisablePreview">true</item>

花一些时间找到解决方案,所以这里是问题的完整说明

为什么要预览窗口?

Android需要一些时间来从类,资源等加载数据(在启动时),以便克服android显示称为Window预览的临时窗口的麻烦。 这为用户提供了应用程序启动的即时反馈,也使应用程序有时间进行自身初始化。当您的应用程序准备好运行时,系统会删除预览窗口并显示您的应用程序的窗口和视图。结果,显示启动窗口时,您的Java代码均不会执行。

答案 1 :(得分:0)

setContentView不应生效(并且Activity也不需付出任何努力),因为finish()中的onCreate在更早的时候被调用了,但是请确保添加{{1} }放在括号中

您看到的是return颜色,可能会更改为windowBackground的主题

Activity

您也可以在调用// theme for activity, not whole application, will not affect other activities <style name="MainActivityTheme" parent="AppTheme"> <item name="android:windowBackground">#345678</item> 之前通过代码对其进行更改,但是有一段时间可能是主题中可见的颜色(尤其是在低端设备上),并且您不希望这样做

也许更好的方法是新的super.onCreate,它将是fully transparent并直接重定向到正确的Activity?或者如果您的会话还原非常繁琐,则使用不带Activity这样的视觉表示的smth吗?

请注意Service标志,因为您的windowIsTranslucent will loose rotation configuration change calls