美文网首页
Android优化驱动速度

Android优化驱动速度

作者: 5e1b18effb55 | 来源:发表于2017-08-25 17:17 被阅读0次

冷启动:当启动应用时,后台没有该应用的进程,这时系统会重新创建一个新的进程分配给该应用,这个启动方式就是冷启动。

热启动:当启动应用时,后台已有该应用的进程(例:按back键、home键,应用虽然会退出,但是该应用的进程是依然会保留在后台,可进入任务列表查看),所以在已有进程的情况下,这种启动会从已有的进程中来启动应用,这个方式叫热启动。

  • 首先要优化写在Application的onCreate方法里面耗时操作:
    把初始化的东西移动到IntentService来解决
/**
 * An {@link IntentService} subclass for handling asynchronous task requests in
 * a service on a separate handler thread.
 * <p>
 * TODO: Customize class - update intent actions, extra parameters and static
 * helper methods.
 */
public class InitializeService extends IntentService {

    private static final String ACTION_INIT_WHEN_APP_CREATE = "com.imyuu.travel.service.init.action.INIT";

    public InitializeService() {
        super("InitializeService");
    }

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

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

    private void performInit() {
        Logger.init(this);

        ExternalStorgeUtils.init();

        // init crash helper
        CrashHandler.getInstance().init(getApplicationContext());

        // init Push
        initPushPlatform();

        initX5();
    }
}

然后在Application的onCreate方法里面向下面这样调用:

@Override
    public void onCreate() {
        super.onCreate();
        InitializeService.start(this);
    }

当然了,需要开启页面就用到的初始化还是要放到onCreate里面的

  • 然后需要解决APP进程完全被系统回收的情况,也就是冷启动

这种情况下,开启APP,需要系统重新走一遍启动流程:

Application的构造器方法——>attachBaseContext()——>onCreate()——>Activity的构造方法——>onCreate()——>配置主题中背景等属性——>onStart()——>onResume()——>测量布局绘制显示在界面上。

这种时候要解决白屏只需要重写一个主题,把里面的windowBackground更换一下就好了,然后把它设置成你的启动activity的主题,代码如下:

<!-- 启动主题 -->
    <style name="customBackground" parent="@android:style/Theme.Holo.Light">
        <item name="android:windowBackground">@drawable/splash_layers</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowAnimationStyle">@style/notAnimation</item>
        <item name="android:windowFullscreen">true</item>
    </style>

splash_layers.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <bitmap
            android:gravity="fill"
            android:src="@mipmap/index_bg" />
    </item>
    <item>
        <bitmap
            android:gravity="center"
            android:src="@mipmap/index_img1" />
    </item>
    <!--<item>
        <bitmap
            android:gravity="bottom|center"
            android:src="@drawable/splash_bottom" />
    </item>-->
</layer-list>

相关文章

网友评论

      本文标题:Android优化驱动速度

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