Pantalla en negro antes de que la pantalla Splash aparezca en android

Sabemos que cuando la aplicación de algún proceso largo como la descarga de información de Internet podría mostrar una pantalla de bienvenida antes de cargar la aplicación y cuando la aplicación se carga completamente se mostrará la página principal. En la actividad de pantalla de inicio debemos cargar procesos largos en subprocesos para evitar mostrar la pantalla en negro antes de cargar la aplicación. Yo había hecho todos ellos. Pero también la pantalla negra aparece antes de mostrar la aplicación. Este es mi método onCreate de la actividad de la pantalla de bienvenida:

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); } } 

Y este es el código del método LoadApplication :

 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 (); } 

No entiendo por qué aparece la pantalla negra y cómo debe evitar de esto ahora. Tengo algún código que el acceso al almacenamiento en oncreate de mi clase de aplicación. Tal vez la raíz de la cuestión sea desde allí. Así que he compartido su código:

 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 short.Now historia la pregunta es esta – Realmente lo que es la causa de esta pantalla en negro. Es esto de la actividad de salpicaduras o de la clase de aplicación. ¿Y cómo podemos resolverlo y evitar la forma de mostrar esto?

Agregue un tema con el fondo que está utilizando a su etiqueta de aplicación en el archivo de manifiesto para evitar que se dibuje la pantalla en negro.

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" > .... 

Lea por qué hay una pantalla en negro aquí En el lanzamiento de la aplicación, Android muestra una ventana de vista previa simple (basada en su tema de actividad) como una respuesta inmediata a la acción del usuario. A continuación, la ventana de vista previa se desvanece con su interfaz de usuario actual, una vez que se ha cargado completamente. Para asegurar una transición visual suave, el tema de actividad debe coincidir con su IU completa lo más cerca posible. La imagen de abajo muestra cómo la experiencia puede ser jarring si no se maneja correctamente.

Esta pantalla inicial que se ve se denomina pantalla "Vista previa". Puede desactivar esto completamente declarando esto en su tema:

 android:windowDisablePreview <style name="Theme.MyTheme" parent="android:style/Theme.Holo"> <!-- This disables the black preview screen --> <item name="android:windowDisablePreview">true</item> </style> 

Una explicación de cómo manejar esta pantalla se publica aquí: http://cyrilmottier.com/2013/01/23/android-app-launching-made-gorgeous/

Agregue esta línea en su AndroidManifest.xml a la Actividad del Lanzador:

android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen

Si llama a algún "código pesado" en onCreate la pantalla aparecerá en negro hasta que se complete la carga. Usted podría considerar el uso de AsyncTask y hacer que el onCreate manejar setContentView etc, y hacer que el AsyncTask manejar "el código pesado".

La mejor solución para evitar este problema es usar AsyncTask, aquí hay un código de ejemplo que uso en uno de mis ListActivity:

  private class YoutubeTask extends AsyncTask<URL, Integer, String> { protected void onPreExecute() { super.onPreExecute(); mLoadingProgress.startAnimation(mDisappear); mLoadingProgress.setVisibility(View.GONE); showDialogProgress(); } protected String doInBackground(URL... url) { youtubeData = VersionParser.readFromUrl(url[0]);; try { JSONObject jsono = new JSONObject(youtubeData); JSONObject feed = jsono.getJSONObject("feed"); JSONArray entry = feed.getJSONArray("entry"); for(int i = 0 ; i < entry.length() ; i++ ){ JSONObject item = entry.getJSONObject(i); JSONArray AUTHOR = item.getJSONArray(TAG_AUTHOR); JSONObject Author = AUTHOR.getJSONObject(0); JSONObject author = Author.getJSONObject("name"); String author_name = author.getString(TAG_TITRE); JSONObject Statistics = item.getJSONObject("yt$statistics"); String Views = Statistics.getString(TAG_VIEWS); JSONObject Media = item.getJSONObject("media$group"); JSONObject MediaTitle = Media.getJSONObject("media$title"); String title = MediaTitle.getString(TAG_TITRE); JSONObject DURATION = Media.getJSONObject("yt$duration"); String duration = DURATION.getString(TAG_DURATION); JSONArray Thumbinail = Media.getJSONArray("media$thumbnail"); JSONObject IMAGE = Thumbinail.getJSONObject(0); String image = IMAGE.getString(TAG_CONTENT); String id = image.substring(22,33); map = new HashMap<String, String>(); map.put(TAG_TITRE , title ); map.put(TAG_ID , id ); map.put(TAG_DURATION , duration ); map.put(TAG_IMAGE , image); map.put(TAG_VIEWS , Views ); map.put(TAG_AUTHOR , author_name); CURRENCY.add(map); } } catch (JSONException e) { e.printStackTrace(); } return null; } @Override protected void onPostExecute(String result) { dismisDialogProgress(); mListView.setVisibility(View.VISIBLE); mListView.startAnimation(mAppear); mAdapter = new MAdapter(youtubeSearch.this , CURRENCY); mListView.setSelector(R.drawable.home_bg); mListView.setAdapter(mAdapter); } } 

Y dentro del método onCreate implementar esto:

  @Override public void onCreate(Bundle savedInstanceState) { if (Build.VERSION.SDK_INT < 11) setTheme(android.R.style.Theme_Black_NoTitleBar); } super.onCreate(savedInstanceState); setContentView(R.layout.main); new YoutubeTask().execute(new URL("https://gdata.youtube.com/feeds/api/videos?q=Adele&max-results=15&v=2&alt=json")); } 

Puede resolver este error convirtiendo la imagen como un pincel (color).

Agregue un nuevo archivo xml (splash_bg.xml) en la carpeta dibujable, como esto.

 <?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> 

Ahora agregue un nuevo estilo y aplique splash_bg.xml como color de fondo.

 <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> 

Aplique este nuevo estilo a la actividad principal del lanzador oa la pantalla de bienvenida.

 [Activity(Label = "label", MainLauncher = true, Theme = "@style/Theme.SplashBg")] public class SplashScreenActivity : Activity 

Aquí hay algo de reflexión; Tal vez usted no tiene un retraso de inicialización considerable en su aplicación en absoluto; Usted puede ser que de hecho, esté esperando el servicio inmediato del funcionamiento .

Por lo que he experimentado, los síntomas de esto son que su aplicación muestra una pantalla larga negro mientras inicializa, pero al depurar encontrará que ninguno de los métodos onCreate de su Application / Activity onCreate no han sido llamados mientras es visible.

  • Monodroid - Manejo de eventos en las vistas secundarias de filas ListView reutilizadas
  • El lanzamiento de la aplicación se está estrellando en el lanzamiento de la aplicación con Android 5.1.1 lollipop después de la actualización de xamarin en Visual Studio
  • Monodroid para el servicio android
  • ¿Cómo uso SharedPreferences en Xamarin.Android?
  • Xamarin aplicaciones son grandes por qué y pueden ser más pequeños
  • Botón de acción flotante Desplazamiento comportamiento extraño
  • No se puede usar el diseño de ScrollView dentro de SlidingUpPanelLayout Xamarin Android
  • SetColorFilter no funciona en Xamarin.Android
  • Xamarin Android deserializa el archivo json local
  • Xamarin no muestra la imagen de formularios: Android
  • Cómo configurar onclick oyente en xamarin?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.