美文网首页
android解决首页进入黑屏问题

android解决首页进入黑屏问题

作者: crush_d872 | 来源:发表于2020-09-09 11:02 被阅读0次

最近项目中遇到一个问题,从启动页进入到首页时,会有一小段的黑屏时间,导致用户体验很差,我的解决办法如下:
1.延迟启动页的销毁
2.设置首页的Theme为透明样式 代码如下:

MainActivity的Theme:

<style name="MainStyle" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="android:windowBackground">@color/transparent</item>
    <item name="android:windowIsTranslucent">true</item>
</style>

销毁启动页的操作放在了MainActivity的onResume方法中:

new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            AppManager.getAppManager().finishLastActivity();
            if (isTransucent){
                isTransucent = false;
                SystemUtils.convertActivityFromTranslucent(MainActivity.this);
            }
        }
    },1000);

由于我们的首页加载的东西太多了,回调走到onResume都没有展示出视图,所以我还做了一些延迟,除此之外,还有几句代码稍后做解释,

这样处理后,黑屏是消失了,但是windowIsTranslucent这个theme在项目中造成了诸多问题,比如跳转activity会回到桌面,影响生命周期等等,为了解决这些问题,我决定在首页展示正常后 ,再把它还原成非透明状态 避免出现很多问题,也就是这句代码

if (isTransucent){
                isTransucent = false;
                cn.wlantv.kznk.utils.SystemUtils.convertActivityFromTranslucent(MainActivity.this);
            }

如何还原成非透明状态,在Activity中有这两个方法convertToTranslucent和convertFromTranslucent,直接使用反射调用这两个方法

/**
 * Convert a translucent themed Activity
 * 将Activity 改为透明
 */
public static void convertActivityToTranslucent(Activity activity) {
    long timeMillis = SystemClock.currentThreadTimeMillis();
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        convertActivityToTranslucentAfterL(activity);
    } else {
        convertActivityToTranslucentBeforeL(activity);
    }
}

/**
 * Calling the convertToTranslucent method on platforms before Android 5.0
 */
public static void convertActivityToTranslucentBeforeL(Activity activity) {
    try {
        Class<?>[] classes = Activity.class.getDeclaredClasses();
        Class<?> translucentConversionListenerClazz = null;
        for (Class clazz : classes) {
            if (clazz.getSimpleName().contains("TranslucentConversionListener")) {
                translucentConversionListenerClazz = clazz;
            }
        }
        Method method = Activity.class.getDeclaredMethod("convertToTranslucent",
                translucentConversionListenerClazz);
        method.setAccessible(true);
        method.invoke(activity, new Object[] {
                null
        });
    } catch (Throwable t) {
    }
}

/**
 * Calling the convertToTranslucent method on platforms after Android 5.0
 */
private static void convertActivityToTranslucentAfterL(Activity activity) {
    try {
        Method getActivityOptions = Activity.class.getDeclaredMethod("getActivityOptions");
        getActivityOptions.setAccessible(true);
        Object options = getActivityOptions.invoke(activity);

        Class<?>[] classes = Activity.class.getDeclaredClasses();
        Class<?> translucentConversionListenerClazz = null;
        for (Class clazz : classes) {
            if (clazz.getSimpleName().contains("TranslucentConversionListener")) {
                translucentConversionListenerClazz = clazz;
            }
        }
        Method convertToTranslucent = Activity.class.getDeclaredMethod("convertToTranslucent",
                translucentConversionListenerClazz, ActivityOptions.class);
        convertToTranslucent.setAccessible(true);
        convertToTranslucent.invoke(activity, null, options);
    } catch (Throwable t) {
    }
}
//设置Activity的windowIsTranslucent为false
public static void convertActivityFromTranslucent(Activity activity) {
    try {
        Method method = Activity.class.getDeclaredMethod("convertFromTranslucent");
        method.setAccessible(true);
        method.invoke(activity);
    } catch (Throwable t) {
    }
}

这样首页的问题就可以完美解决了

相关文章

网友评论

      本文标题:android解决首页进入黑屏问题

      本文链接:https://www.haomeiwen.com/subject/fyceektx.html