美文网首页
Android 启动优化

Android 启动优化

作者: 宁君26 | 来源:发表于2018-09-06 10:14 被阅读15次

1.视觉优化

给启动页面设置主题:

  <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="android:windowBackground">@mipmap/launch</item>   //闪屏页图片
    <item name="android:windowFullscreen">true</item>
    <item name="android:windowContentOverlay">@null</item>
</style>

2 .代码优化

冷启动耗时统计
adb命令 : adb shell am start -S -W 包名/启动类的全限定名 , -S 表示重启当前应用

2.1 Application 优化

我们可以根据这些组件的轻重缓急之分,对初始化做一下分类 :

  1. 必要的组件一定要在主线程中立即初始化(入口 Activity 可能立即会用到)
  2. 组件一定要在主线程中初始化,但是可以延迟初始化。
  3. 组件可以在子线程中初始化。

放在子线程的组件初始化建议延迟初始化 ,这样就可以了解是否会对项目造成影响!

new Thread(new Runnable() {

    @Override

    public void run() {

        //设置线程的优先级,不与主线程抢资源

        Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);

        //子线程初始化第三方组件

        Thread.sleep(5000);//建议延迟初始化,可以发现是否影响其它功能,或者是崩溃!

    }

}).start();

将需要在主线程中初始化但是可以不用立即完成的动作延迟加载(原本是想在入口 Activity 中进行此项操作,不过组件的初始化放在 Application 中统一管理为妙.)

2.2 闪屏页业务优化

闪屏页政展示总时间 = 组件初始化时间 + 剩余展示时间。

在application 的attachBaseContext 方法中记录启动时间a.
然后在入口activity 的onWindowFocusChanged 中记录activity打开的时间b

diffTime = b-a;
所以闪屏页展示的时间为 2000ms - diffTime.

我们就可以动态的设置应用闪屏的显示时间,尽量让每一部手机展示的时间一致,这样就不会让手机配置较低的用户感觉漫长难熬的闪屏页时间(例如初始化了2000ms,又要展示2000ms的闪屏页时间.),优化用户体验。


//Application

@Override

protected void attachBaseContext(Context base) {

    super.attachBaseContext(base);

    SPUtil.putLong("application_attach_time", 

        System.currentTimeMillis());//记录Application初始化时间

}
//入口Activity

@Override

public void onWindowFocusChanged(boolean hasFocus) {

    super.onWindowFocusChanged(hasFocus);

      long appAttachTime = SPUtil.getLong("application_attach_time");

      long diffTime = System.currentTimeMillis() - appAttachTime;//从application到入口Acitity的时间

     //所以闪屏页展示的时间为 2000ms - diffTime.

}

相关文章

网友评论

      本文标题:Android 启动优化

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