直播app源码Android Activity 启动出现白屏带标题或闪屏问题解决

当你打开一个App时其实就是打开了一个activity,如果这个Activity所属的应用还没有在运行,那么系统会为这个Activity所属的应用创建一个进程,创建进程是需要时间的,从而导致了白屏或黑屏的出现。

带标题可能是设置了自定义标题

或者设置了Theme 属性 <item name="android:windowNoTitle">false</item>

@Override
protected void onCreate( Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    
    requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
    setContentView(R.layout.family_number);
    getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.title);
}

第一种处理方式:

设置Theme窗口背景windowBackground,通过以Splash的形式出现,作为启动图片

<style name="styleSplashImage" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="android:windowBackground">@drawable/splash_bg</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowNoTitle">false</item>
</style>

注意:如果在Activity里做的操作处理任务比较多,可能还是会出现白屏或者闪屏现象

第二种处理方式:

在第一种的基础上定义一个SplashActivity过渡加载跳转到主界面Activity

<!--欢迎页面主题-->
    <style name="AppTheme.NoActionBar.FullScreen">
        <item name="android:windowFullscreen">true</item>
        <item name="android:windowBackground">@mipmap/splash_bg</item>
    </style>
 
 
public class SplashActivity extends AppCompatActivity {
 
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
//        setContentView(R.layout.activity_splash);
 
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                startActivity(new Intent(SplashActivity.this, MainActivity.class));
                finish();
            }
        }, 1500);
    }
}

第三种处理方式:

通过设置Theme android:windowIsTranslucent属性设置为true,背景透明属性

<style name="styleSplashImage" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="android:windowIsTranslucent">true</item>
        <item name="android:windowNoTitle">true</item>
    </style>

注意:这样设置出现问题,跳转或切换页面的动画效果失效了

解决:自己定义一个窗口动画样式 android:windowAnimationStyle

<style name="FamilyNumberThemeNew" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDarks</item>
        <item name="colorAccent">@color/colorAccent</item>
 
        <item name="android:windowActionBar">false</item>
        <item name="android:windowTitleBackgroundStyle">@color/titleBarBackground</item>
        <item name="android:windowTitleSize">50dip</item>
        <item name="android:textSize">18sp</item>
 
        <item name="android:windowFullscreen">true</item>
        <item name="android:windowContentOverlay">@null</item>-->
         <!--设置页面窗口跳转出现白屏问题-->
        <item name="android:windowIsTranslucent">true</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowAnimationStyle">@style/ActivityAnimaStyle</item>
    </style>
    
    <style name="ActivityAnimaStyle" parent="@android:style/Animation.Activity">
        <item name="android:activityOpenEnterAnimation">@anim/anim_fade_in</item>
        <item name="android:activityOpenExitAnimation">@anim/anim_fade_out</item>
        <item name="android:activityCloseEnterAnimation">@anim/anim_fade_in</item>
        <item name="android:activityCloseExitAnimation">@anim/anim_fade_out</item>
        <item name="android:taskOpenEnterAnimation">@anim/anim_fade_in</item>
        <item name="android:taskOpenExitAnimation">@anim/anim_fade_out</item>
        <item name="android:taskCloseEnterAnimation">@anim/anim_fade_out</item>
        <item name="android:taskCloseExitAnimation">@anim/anim_fade_out</item>
        <item name="android:taskToFrontEnterAnimation">@anim/anim_fade_in</item>
        <item name="android:taskToFrontExitAnimation">@anim/anim_fade_out</item>
        <item name="android:taskToBackEnterAnimation">@anim/anim_fade_out</item>
        <item name="android:taskToBackExitAnimation">@anim/anim_fade_out</item>
 
    </style>
anim_fade_in.xml
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/accelerate_decelerate_interpolator"
    android:fromAlpha="0.0" android:toAlpha="1.0"
    android:duration="300" />
anim_fade_out.xml
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/accelerate_decelerate_interpolator"
    android:fromXDelta="0" android:toXDelta="0"
    android:duration="300" />

你可能感兴趣的:(技术类,android,安卓,移动开发,window,app)