Black screen before Splash screen appear in android
Solution 1
Add a theme with the background you are using to your application tag in the manifest file to prevent the black screen to be drawn.
theme.xml
<resources>
<!-- Base application theme is the default theme. -->
<style name="Theme" parent="android:style/Theme" />
<style name="Theme.MyAppTheme" parent="Theme">
<item name="android:windowNoTitle">true</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowBackground">@drawable/my_app_background</item>
</style>
</resources>
AndroidManifest.xml
....
<application
android:name="@string/app_name"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/Theme.MyAppTheme"
>
....
Read why there is a black screen here
Solution 2
This initial screen that you see is called the "Preview" screen. You can disable this completely by declaring this in your theme:
android:windowDisablePreview
<style name="Theme.MyTheme" parent="android:style/Theme.Holo">
<!-- This disables the black preview screen -->
<item name="android:windowDisablePreview">true</item>
</style>
An explanation of how to handle this screen is posted here: http://cyrilmottier.com/2013/01/23/android-app-launching-made-gorgeous/
Solution 3
Add this line in your AndroidManifest.xml
to the Launcher Activity:
android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen
Solution 4
You can solve this bug by converting image as a brush(color).
Add new file xml(splash_bg.xml) file in the drawable folder, like this.
<?xml version="1.0" encoding="utf-8" ?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<color android:color="@color/splash_bg_color"/>
</item>
<item>
<bitmap
android:src="@drawable/splash_screen"
android:tileMode="disabled"
android:gravity="center"/>
</item>
</layer-list>
Now add a new style, and apply splash_bg.xml as a background color.
<style name="Theme.SplashBg" parent="android:Theme">
<item name="android:windowBackground">@drawable/splash_bg</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowContentOverlay">@null</item>
</style>
Apply this new style to your main launcher activity or splash screen.
[Activity(Label = "label", MainLauncher = true, Theme = "@style/Theme.SplashBg")]
public class SplashScreenActivity : Activity
Solution 5
If you call some "heavy code" in onCreate the screen will appear black until it is done loading. You might consider using AsyncTask and make the onCreate handle setContentView etc, and make the AsyncTask handle "the heavy code".
Husein Behboudi Rad
Updated on December 29, 2021Comments
-
Husein Behboudi Rad over 2 years
We know that when the app do some long process like downloading some information from internet it could show a splash screen before loading the application and when the app is loaded completely it will display the main page. In splash screen activity we must load long processes in threads to avoid showing black screen before loading app. I had done all of them. but also the black screen appears before showing app. This is my onCreate method of the splash screen activity:
protected override void OnCreate (Bundle bundle) { try { base.OnCreate (bundle); //_dt = DateTime.Now.AddSeconds (_splashTime); SetContentView (Resource.Layout.Splash ); FirstLoadPB= FindViewById <ProgressBar >(Resource .Id.FirstLoadPB ); FirstLoadingInfo= FindViewById <TextView >(Resource .Id.FirstLoadInfo ); LoadApplication (); } catch (System.Exception ex) { Common.HandleException (ex); } }
and this is the code of
LoadApplication
method:public void LoadApplication() { new System.Threading.Thread (new ThreadStart (() => { //Some Codes to load applications- Downloading from web and accessing the storage(Because was many codes - about 100 line- i was clear them. } ) ).Start (); }
I don't understand why the black screen appears and how should to avoid from this now. I have some code that access to storage in oncreate of my application class. Maybe the issue's root cause be from there.There fore i shared its code:
public override void OnCreate () { try { base.OnCreate (); _typeOfShow = new MapViewType (); ListingTypes = new Dictionary<int,ListingTypeItem> (); OfflineMode =false; PropertyShowWasShown = false; MeasutingUnitsChanged =false; if(RplXmlSettings .Instance .getVal (AppConstants .XmlSettingShowOnCurrentLocationKey )== "True") typeOfShow .ShowOnCurrentLocation =true ; else typeOfShow .ShowOnCurrentLocation =false; //StorageClass .ctx = ApplicationContext ; FillDashboardOnResume =false; //initlize image loader ImageLoader = Com.Nostra13.Universalimageloader.Core.ImageLoader.Instance; Options = new DisplayImageOptions.Builder () .ShowImageForEmptyUri (Resource.Drawable.ic_tab_map) .CacheOnDisc () .CacheInMemory () .ImageScaleType (ImageScaleType.InSampleInt) .BitmapConfig (Bitmap.Config.Rgb565) .Displayer (new FadeInBitmapDisplayer (300)) .Build (); ImageLoaderConfiguration config; ImageLoaderConfiguration .Builder builder =new ImageLoaderConfiguration .Builder (ApplicationContext).ThreadPoolSize (3); if(RplXmlSettings .Instance .getVal (AppConstants .XmlSettingMemoryCacheKey )== "True") builder .ThreadPriority (4).MemoryCacheSize (1500000) ;// 1.5 Mb builder . DenyCacheImageMultipleSizesInMemory (). DiscCacheFileNameGenerator (new Md5FileNameGenerator ()). MemoryCache (new WeakMemoryCache()). DiscCacheSize (15000000); config = builder .Build (); ImageLoader.Init (config); } catch (Exception ex) { Common .HandleException (ex); } }
OK.Long story short.Now the question is this-- Really what is the root cause of this black screen. Is this from splash activity or from application class. And How we can solve it and avoid form showing this?