[Android]Splash界面解决启动白屏/黑屏问题
2017-06-20 21:23
459 查看
我相信很多Android开发的同学都遇到过这样的需求:
实现一个Splash界面,界面上有应用相关的背景图片和一个开始按钮
点击按钮之后进入主页,以后用户再打开应用就不显示这个Splash界面了
也相信很多同学都遇到了这样的困惑:
第二次进入应用,尽管你在Splash界面已经直接跳转到首页了,但是还是有个白屏或者黑屏或者带ActionBar的白屏闪现一下
如果你也遇到这个问题,那就继续阅读这篇文章,我带大家去分析和解决这个问题.
解决方案:解决方案非常简单,一句话概括是:给Splash Activity设置一个主题,主题内容是:全屏+透明.
style.xml增加SplashTheme主题:
AndroidManifest.xml中为SplashActivity配置主题:
经过如上配置,困扰你的白屏、黑屏、ActionBar屏应该都已经烟消云散了.为了知其然,并知其所以然,希望同学能继续跟我一起分析一下这些白屏产生的原因.
Activity组件的窗口启动过程
本段内容大量参考了罗升阳老师的博客。为了方便理解,对其内容进行了压缩。如果侵权,我立刻删掉这段分析
想要了解白屏产生的根源,就不得不去跟踪Activity组件的窗口启动过程。Activity组件在启动的过程中,会调用ActivityStack类的成语函数startActivityLocked方法。注意,在调用ActivityStack类的成语函数startActivityLocked方法的时候,Activity组件还处于启动过程中,即它的窗口尚未显示出来,不过这时候ActivityManagerService服务会检查是否需要为正在启动的Activity组件显示一个启动窗口。如果需要的话,那么ActivityManagerService服务就会请求WindowManagerService服务为正在启动的Activity组件设置一个启动窗口(ps:而这个启动窗口就是白屏的由来)。
ActivityStack.startActivityLocked
实现一个Splash界面,界面上有应用相关的背景图片和一个开始按钮
点击按钮之后进入主页,以后用户再打开应用就不显示这个Splash界面了
也相信很多同学都遇到了这样的困惑:
第二次进入应用,尽管你在Splash界面已经直接跳转到首页了,但是还是有个白屏或者黑屏或者带ActionBar的白屏闪现一下
如果你也遇到这个问题,那就继续阅读这篇文章,我带大家去分析和解决这个问题.
解决方案:解决方案非常简单,一句话概括是:给Splash Activity设置一个主题,主题内容是:全屏+透明.
style.xml增加SplashTheme主题:
<style name="SplashTheme" parent="android:style/Theme.Black.NoTitleBar.Fullscreen"> <item name="android:windowFullscreen">true</item> <item name="android:windowIsTranslucent">true</item> </style>
AndroidManifest.xml中为SplashActivity配置主题:
<activity android:name=".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>
经过如上配置,困扰你的白屏、黑屏、ActionBar屏应该都已经烟消云散了.为了知其然,并知其所以然,希望同学能继续跟我一起分析一下这些白屏产生的原因.
Activity组件的窗口启动过程
本段内容大量参考了罗升阳老师的博客。为了方便理解,对其内容进行了压缩。如果侵权,我立刻删掉这段分析
想要了解白屏产生的根源,就不得不去跟踪Activity组件的窗口启动过程。Activity组件在启动的过程中,会调用ActivityStack类的成语函数startActivityLocked方法。注意,在调用ActivityStack类的成语函数startActivityLocked方法的时候,Activity组件还处于启动过程中,即它的窗口尚未显示出来,不过这时候ActivityManagerService服务会检查是否需要为正在启动的Activity组件显示一个启动窗口。如果需要的话,那么ActivityManagerService服务就会请求WindowManagerService服务为正在启动的Activity组件设置一个启动窗口(ps:而这个启动窗口就是白屏的由来)。
ActivityStack.startActivityLocked
public class ActivityStack { // set to false to disable the preview that is shown while a new activity // is being started. static final boolean SHOW_APP_STARTING_PREVIEW = true; private final void startActivityLocked(ActivityRecord r, boolean newTask, boolean doResume) { final int NH = mHistory.size(); int addPos = -1; // Place to new activity at top of stack, so it is next to interact // with the user. if (addPos < 0) { addPos = NH; } // Slot the activity into the history stack and proceed mHistory.add(addPos, r); if (NH > 0) { // We want to show the starting preview window if we are // switching to a new task, or the next activity's process is // not currently running. boolean showStartingIcon = newTasks; ProcessRecord proc = r.app; if (proc == null) { proc = mService.mProcessNames.get(r.processName, r.info.applicationInfo.uid); } if (proc == null || proc.thread == null) { showStartingIcon = true; } } } }
相关文章推荐
- Android Splash界面解决白屏、黑屏等问题
- Android Splash界面白屏、黑屏问题的解决方法
- Android Splash界面解决白屏、黑屏等问题
- Android启动界面先白屏或者黑屏然后才出现画面的解决办法
- 解决启动Android应用程序时出现白屏或者黑屏的问题
- Android开发之解决APP启动白屏或者黑屏闪现的问题
- Android 解决启动app白屏或黑屏的问题
- Android 性能优化——解决应用启动白屏/黑屏问题
- 解决Android应用启动时白屏或者黑屏的问题
- Android启动界面先白屏或者黑屏然后才出现画面的解决办法
- Android启动欢迎界面前黑屏或白屏完美解决办法
- Android开发之解决APP启动白屏或者黑屏闪现的问题,androidapp
- (转)Android启动界面先白屏或者黑屏然后才出现画面的解决办法
- Android解决APP启动白屏或者黑屏闪现的问题
- Android启动界面先白屏或者黑屏然后才出现画面的解决办法
- 解决Android App第一次启动时显示白屏或者黑屏的问题
- Android开发之解决APP启动白屏或者黑屏闪现的问题
- Android解决APP启动白屏或者黑屏闪现的问题
- Android 编程日记 解决应用启动时白屏或者黑屏的问题
- 解决Android APP启动出现白屏或黑屏的问题