工作半年有余,感觉工作忙起来的时候非常忙,闲的时候就非常闲,这应该就是IT人生吧。为了积累平时开发中遇到的问题,常常想开个博客什么之类的总结总结,可是想了大半年没动手。这是在CSDN上的第一篇文章,以简单开始,慢慢锻炼自己的学做水平和解决问题的思路。
最近在做一个TV盒子的项目,整个程序较手机上要大而复杂一些,因此遇到了一些关于用户体验的问题。
问题:Activity启动中onCreate耗时过多引起黑屏闪现一下(1-3s),用户体验非常不好!
我们都知道android程序启动的过程为Application→MainActivity→界面完全展示。我们可以继承Application类初始化一些变量,用于全局使用,但是切记不可做过多的耗时工作。
接下来是启动的Activity的onCreate方法。onCreate开始的时候会加载主配置布局文件,也即是setContentView,该函数我测试过整整消耗了200-400ms的时间,当然能耗这么多时间说明布局文件比较复杂。其他的setOnListener基本不耗时。
经过几番折腾,发现无法解决这个setContentView的耗时问题。上网查找别人的解决方案基本就有两个:
1. 设置android:Theme为透明;
2. 设置android:Theme为透明背景。
例如 http://www.apkbus.com/forum.php?mod=viewthread&tid=128126
两个方法都不能解决我的问题,为什么???
1. 主题背景为透明的时。在程序主界面点击一个坑位并快速返回,此时闪现了一下桌面,然后才显示主界面,用户不知情还以为程序崩溃重启了;
2. 主题设置为背景图。由于程序要做一个开机启动大图广告页面,这个大图是不固定的,使用上次下载在本地的图片。因此就会出现这样一种情景,先展示主题背景图,1s后展示广告图。这也是不可行的。
最终解决的目标是,开始就显示广告页面,进入主界面又不出现闪现桌面的情况!
走了很多弯路耗了很多时间、各种尝试,最后发现的解决方法如下:
没错!就是这么简单!屏蔽掉Preview就不会出现启动时manifest配置的Theme背景图了!
总结:
看起来问题的解决方法很简单,但网上竟然没找到这个解决方法,当时就被气惨了!
哎!这就是经验!不是说那些大牛有多牛,其实就是别人的经验比你丰富!加油!