As we all know, many Android apps display a white screen very briefly before their first Activity
comes into focus. This problem is observed in the following cases:
Android apps that extend the global
Application
class and perform major initializations therein. TheApplication
object is always created before the firstActivity
(a fact that can be observed in the debugger), so this makes sense. This is the cause of the delay in my case.Android apps that display the default preview window before the splash screen.
Setting android:windowDisablePreview = "true"
obviously does not work here. Nor can I set the parent theme of the splash screen to Theme.Holo.NoActionBar
as described here, because [unfortunately] my splash screen makes use of an ActionBar
.
Meanwhile, apps that do not extend the Application
class do not show the white screen at startup.
The thing is, ideally the initializations performed in the Application
object need to occur before the first Activity
is shown. So my question is, how can I perform these initializations on app startup without using an Application
object? Possibly using a Thread
or Service
, I suppose?
This is an interesting problem to think about. I can't bypass it the usual way (by setting the NoActionBar
theme), as tragically my Splash screen actually has an ActionBar
due to some unrelated reasons.
Note:
I have already referred to the following questions:
References:
Both properties works
Within the lifecycle callback methods, you can declare how your activity behaves when the user leaves and re-enters the activity. Remember that the way Android is designed, there is a lifecycle for each and every app. If you put too much load to the
onCreate()
method (which is the method used to load the layout files and initalise any controls you have in it), then the white screen will become more visible, as the layout file will take longer to load.I suggest using several different methods when starting an activity. Such are the
onStart()
(being called as the first thing once the app is loaded),onActivityCreated()
(being called after the layout is displayed and useful if you are making any data processing upon starting the activity).To make it easier for you, below is the official activity lifecycle diagram:
please add this line into your app theme
The problem with white background is caused because of android's cold start while the app loads to memory, and it can be avoided with this:
layout
img face
Add this theme to your splashscreen in the manifest
which will produce efect like this
for more details and more solutions you can check this BlogPost
As you are already aware why this white screen is there, as due to background processes or application initialization or large files, so just check below idea for overcome from this.
To prevent this white screen on beginning of the app, one way is splash screen, this is just a way not final and you must have to use.
When you will show splash screen from your splash.xml file, then also this issue will be remain same,
So you have to create ont style in style.xml file for splash screen and there you have to set window background as your splash image and then apply that theme to your splash activity from manifest file. So now when you will run app, first it will set theme and by this way user will be able to see directly splash image instead of white screen.
First of all, to remove the white screen read this - https://www.bignerdranch.com/blog/splash-screens-the-right-way/
But more importantly, optimize your initial load and defer any heavy work to when you have time to run it. Post your application class here if you want us to take a look at it.