简单处理app启动白屏以及优化启动速度

一、优化启动白屏

其实对于优化启动白屏有三种:
主题里设置
1、

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

2、

 <item name="android:windowBackground">xxxx</item>

3、

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

通过对某些常用app反编译来看,很多使用的是设置

 <item name="android:windowBackground">@null</item>
 <item name="android:windowDisablePreview">true</item>

这样设置点击应用图标的时候会有短暂的停顿,然后再启动app。
或者把

 <item name="android:windowBackground">xxxx</item>

设置成图片,主要需要和启动页的图片一致,这样可以马上看起应用启动。但是为了不影响后面的activity,最好启动的activity设置成单独的主题。
这里还有一个问题就是现在全面屏手机都有导航栏,需要注意启动的时候导航栏显示问题。大部分的做法是,将启动页设置成全屏的,然后将导航栏设置成全透明来适配。导航栏和状态栏设置成全透明的代码

     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {  
            Window window = getWindow();  
            window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS | WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);  
            window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);  
            window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);  
            window.setStatusBarColor(Color.TRANSPARENT);  
            window.setNavigationBarColor(Color.TRANSPARENT);  
            return;  
        }  
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {  
            getWindow().addFlags( WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);  
            getWindow().addFlags( WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);  

项目中需要用到沉浸式设计最好还是在代码里设置,主题里设置有坑,也可以用别人写好的工具类来实现。

二、优化启动速度

当然这个主要就是是在application和activity的onCreate不要做太多初始化的工作。这里可以使用IntentService来进行初始化

public class InitializeService extends IntentService {

    private static final String ACTION_INIT = "initApplication";

    public InitializeService() {
        super(ACTION_INIT);
    }



    public static void start(Context context) {
        Intent intent = new Intent(context, InitializeService.class);
        intent.setAction(ACTION_INIT);
        context.startService(intent);
    }

    @Override
    protected void onHandleIntent(Intent intent) {
        if (intent != null) {
            final String action = intent.getAction();
            if (ACTION_INIT.equals(action)) {
                initApplication();
            }
        }
    }



    private void initApplication() {
    //在这里作初始化工作
    }


}

使用的时候注意一点某些第三方sdk可能会使用handler,这样可能会报错,所以有这样的第三方sdk只能放到主线程里去进行初始化了,或者懒加载,需要使用的时候进行初始化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值