冷启动:当启动应用时,后台没有该应用的进程,这时系统会重新创建一个新的进程分配给该应用,这个启动方式就是冷启动。
热启动:当启动应用时,后台已有该应用的进程(例:按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>
网友评论