提要:
- 以下仅为个人查阅资料,视频总结所得,如有错误,请指出谢谢
优化流程:
- 本文优化是针对启动时App的启动性能和用户体验进行优化
体验优化:
-
在Android Studio 2.0之后,将程序安装到新手机上时,首次启动会出现一个个短暂白屏的现象,但是在后面的版本迟迟没有修复这个我们所认为的bug,那我认为这就不是一个Google技术上的bug:
白屏展示
解决方案:
- 在style文件定义主题
<style name="AppTheme.Launcher1">
<!--取消windowBackground 或者设置启动图片-->
<item name="android:windowBackground">@null</item>
<!--取消window预览视图-->
<item name="android:windowDisablePreview">true</item>
</style>
在当前activity引用当前主题
效果:
简单优化效果
- 注意:体验优化仅为一种伪优化方式,只是优化了用户的体验,在性能上并没有得到提升
性能优化:
- 在性能优化方面,我仅仅是针对当Application的onCreate()方法到Activity的onCreate()这之间进行优化操作,具体操作如下:
- 在Application中,我在onCreate()方法中进行了大量的初始化操作,利用API自带的计时工具Deg.startMethodTraing(file.getAbsolutePath())开始计时,并在 Debug.stopMethodTracing()结束计时,并将结果存入app1.trace文件中
@Override
public void onCreate() {
super.onCreate();
File file = new File(Environment.getExternalStorageDirectory(), "app1.trace");
Log.i(TAG, "onCreate: " + file.getAbsolutePath());
//把分析结果存在一个文件
Debug.startMethodTracing(file.getAbsolutePath());
//对全局属性赋值
mContext = getApplicationContext();
mMainThread = Thread.currentThread();
mMainThreadId = android.os.Process.myTid();
mMainLooper = getMainLooper();
mHandler = new Handler();
//因为LQRUIKit中已经对ImageLoader进行过初始化了
initNim();
initImagePicker();
initOkHttp();//可以懒加载
NIMClient.init(this, loginInfo(), options());
Debug.stopMethodTracing();
}
-
运行App生成app1.trace文件,将文件拖入Android Studio中:
app1.trace导入展示
我们可以看到红色矩形区域内的Item可以onCreate()中的方法引用一一对应,并在Total栏下面分别显示各个方法所执行的时长。
- 优化:
接下来我们开始优化:
优化主要为将耗时的一些操作进行异步处理
@Override
public void onCreate() {
super.onCreate();
File file = new File(Environment.getExternalStorageDirectory(), "app1.trace");
Log.i(TAG, "onCreate: " + file.getAbsolutePath());
//把分析结果存在一个文件
Debug.startMethodTracing(file.getAbsolutePath());
//对全局属性赋值
mContext = getApplicationContext();
mMainThread = Thread.currentThread();
mMainThreadId = android.os.Process.myTid();
mMainLooper = getMainLooper();
mHandler = new Handler();
//因为LQRUIKit中已经对ImageLoader进行过初始化了
initImageLoader(getApplicationContext());
new Thread(){
@Override
public void run() {
//如果要用线程来节约了这些初始化的时间
initNim();
initImagePicker();
initOkHttp();//可以懒加载
}
}.start();
NIMClient.init(this, loginInfo(), options());
Debug.stopMethodTracing();
}
再次运行App:
优化后
可以明显看到优化后和优化之前明显的差异,在使用异步初始化的时候需要注意节点:
- 1.里面的API不能去创建handler
- 2.不能有UI操作
- 3.对异步要求不高
生命不止,学习不止,与君共勉
网友评论