前言
- App优化 - 需要优化哪些?
- App优化 - 性能分析工具
- App的3种启动方式
- App优化 - App启动速度优化
- App优化 - 布局优化
- App优化 - 消除卡顿优化
- App优化 - ANR优化
- App优化 - 电池省着用
- App优化 - 网络优化
1. 概述
在我们开发过程中,或多或少的一定会去集成一些第三方的东西,这个想都不用想,一定会有的,在这里就涉及到对第三方的初始化,而我们一般的处理方式就是在BaseApplication的onCreate()方法中初始化这些第三方的,这个属于常规的做法,而且很多的第三方文档上边也是这样规定的。但是这样做,可能会影响app启动速度。
还有一个问题就是当app没有完全启动起来的时候,会显示白屏,针对于这两个问题,下边就为大家针对于这两个问题提供对应的解决方式,来启动app启动速度。
2. 解决方式
2.1:针对于初始化第三方影响app启动速度
1>:使用IntentService,在BaseApplication中启动一个服务InitializeService ,把所有的第三方初始化都放在 onHandleIntent()方法中来做,最后需要在 AndroidManifest中配置 InitializeService 服务即可,具体代码如下:
/**
* Email: 2185134304@qq.com
* Created by JackChen 2018/4/12 15:35
* Version 1.0
* Params:
* Description:
*/
public class InitializeService extends IntentService {
private static final String ACTION_INIT = "initApplication";
public static void start(Context context) {
Intent intent = new Intent(context, InitializeService.class);
intent.setAction(ACTION_INIT);
context.startService(intent);
}
/**
* Creates an IntentService. Invoked by your subclass's constructor.
* Used to name the worker thread, important only for debugging.
*/
/*public InitializeService(String name) {
super(name);
}*/
public InitializeService(){
super("InitializeService");
}
@Override
protected void onHandleIntent(Intent intent) {
if (intent != null) {
final String action = intent.getAction();
if (ACTION_INIT.equals(action)) {
initApplication();
}
}
}
private void initApplication() {
initBugly(); //初始化腾讯bug管理平台
// BaseConfig.INSTANCE.initConfig(); //初始化配置信息
LogUtils.logDebug = true; //开启日志
}
/**
* 初始化腾讯bug管理平台
*/
private void initBugly() {
/* Bugly SDK初始化
* 参数1:上下文对象
* 参数2:APPID,平台注册时得到,注意替换成你的appId
* 参数3:是否开启调试模式,调试模式下会输出'CrashReport'tag的日志
* 注意:如果您之前使用过Bugly SDK,请将以下这句注释掉。
*/
CrashReport.UserStrategy strategy = new CrashReport.UserStrategy(getApplicationContext());
strategy.setAppVersion(AppUtils.getAppVersionName());
strategy.setAppPackageName(AppUtils.getAppPackageName());
strategy.setAppReportDelay(20000); //Bugly会在启动20s后联网同步数据
/* 第三个参数为SDK调试模式开关,调试模式的行为特性如下:
输出详细的Bugly SDK的Log;
每一条Crash都会被立即上报;
自定义日志将会在Logcat中输出。
建议在测试阶段建议设置成true,发布时设置为false。*/
CrashReport.initCrashReport(getApplicationContext(), "4ae3b64456", true ,strategy);
Log.e("TAG" , "初始化bugly111") ;
}
}
上边我就以自己项目中初始化 bugly 的方式来作为示例代码;
2>:最后在清单文件中配置 InitializeService 即可:
<service android:name=".service.InitializeService"/>
2.2:针对于闪屏页面SplashActivity启动之前的白屏问题
做法就是给SplashActivity在AndroidManifest清单文件中添加 android:theme="@style/SplashTheme"主题即可,做法如下:
1>:在drawable下定义 logo_splash的背景:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 底层白色 -->
<item android:drawable="@color/white" />
<!-- 顶层Logo居中 -->
<item>
<bitmap
android:gravity="center"
android:src="@drawable/ic_github" />
</item>
</layer-list>
2>:在style中搞一个主题:
<style name="SplashTheme" parent="AppTheme">
<item name="android:windowBackground">@drawable/logo_splash</item>
</style>
3>:最后在AndroidManifest.xml文件中,给SplashActivity添加主题即可:
<activity android:name=".ui.guide.view.activity.SplashActivity"
android:theme="@style/SplashTheme"
>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
3. 总结
以上就是从SplashActivity出现白屏、所有第三方的初始化的位置两个方面来进行 App启动速度的优化。
注意:
1>:首屏的SplashActivity尽量简化;
2>:BaseApplication的onCreate()中一定不要做太多的初始化,不要做太多的事情;