观书散遗帙,探古穷至妙。这篇文章主要讲述Android项目实战(四十二):启动页优化,去除短暂白屏或黑屏相关的知识,希望能为你提供帮助。
原文:Android项目实战(四十二):启动页优化,去除短暂白屏或黑屏大家会发现一个空项目,从手机桌面打开app是秒启动。但是对于自己开发的项目,有时会发现打开app的时候,会有短暂的1秒--2秒的白屏或者黑屏,然后才进入到程序界面。
【Android项目实战(四十二)(启动页优化,去除短暂白屏或黑屏)】个人理解为我们自己实现的Application文件里面做了较多的初始化操作,当这些初始化操作完成后才进入到第一个Activity,这段初始化的时间因为没有界面,应用便会因为主题的类别而显示白屏或者黑屏。
构成白屏/黑屏的原因代码如下:
/**
* @author xqx
* @email [email protected]
* blog:http://www.cnblogs.com/xqxacm/
* createAt 2017/1/30
* description: 进行第三方的初始化等操作
*/
public class XApplication extends Application{ @Override public void onCreate() { super.onCreate(); //环信初始化 //EaseUI.getInstance().init(this,null); //EMClient.getInstance().setDebugMode(true); // 友盟统计 普通统计场景类型 MobclickAgent.setScenarioType(this, MobclickAgent.EScenarioType. E_UM_NORMAL); //禁止默认的页面统计方式,这样将不会再自动统计Activity。 MobclickAgent.openActivityDurationTrack(false) ; //日志加密 MobclickAgent.enableEncrypt(true); //6.0.0版本及以后 //错误日志统计 MobclickAgent.setCatchUncaughtExceptions(true); // 页面访问路径统计 MobclickAgent.openActivityDurationTrack(true); // 极光 JPushInterface.setDebugMode(true); JPushInterface.init(this);
/....各种三方初始化 }
解决方法,给应用的第一个Activity单独设置一个不同的主题,一般第一个Activity即为启动页。
我们只要在res/values/styles.xml 文件中写一个主题继承自我们应用的主题
< !-- Base application theme. --> < !-- 应用的主题. --> < style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> < !-- Customize your theme here. --> < item name="colorPrimary"> @color/colorPrimary< /item> < item name="colorPrimaryDark"> @color/colorPrimaryDark< /item> < item name="colorAccent"> @color/colorAccent< /item> < /style> < !--启动页Activity主题,解决开启时1-2秒的白屏问题 , 继承自应用的主题 , 只需要给应用第一个Activity设置此主题即可,一般为启动页--> < style name="MyGuideTheme" parent="AppTheme"> < !-- Customize your theme here. --> < item name="android:windowIsTranslucent"> true< /item> < item name="android:windowNoTitle"> true< /item> < /style>
然后在AndroidManifest.xml文件中,给启动页设置这个主题即可。
< activity android:name=".ui.moduleLogin.GuideActivity" android:configChanges="orientation|keyboardHidden|screenSize" android:screenOrientation="portrait" android:theme="@style/MyGuideTheme"// 这个Activity单独设置主题 > < intent-filter> < action android:name="android.intent.action.MAIN" /> < category android:name="android.intent.category.LAUNCHER" /> < /intent-filter> < /activity>
注意:1、这个解决方法会有一个bug,在小部位机型上设置了该主题的Activity,如果用户进入到最近列表(长按home键或者按菜单键)会出现闪烁问题。
所以我们不能将整个应用的主题都设置为这个,只需要启动页设置,因为启动页只有少数的1-2秒即进入主界面,用户进入最近列表的触发可能性极低,体验较好。
2、如果Application中初始化的东西很多,时间较长,比如超过2秒,此方法不适用,会导致用户点击icon2秒后才打开app,用户体验不佳。
推荐阅读
- Android项目实战(十七)(QQ空间实现—— 分享功能 / 弹出PopupWindow)
- Android项目实战(三十二)(圆角对话框Dialog)
- linux下android studio安装模拟器提示没有空间的问题
- Android项目实战(二十三)(仿QQ设置App全局字体大小)
- Android项目实战(三十七)(Activity管理及BaseActivity的实现)
- 分页示例图解
- 系统分区算法
- 内存分页和分段的区别
- 数值上的最优,LRU和FIFO