Overdraw y el blog de Romain Guy Android Performance Case Study

Basado en la publicación de blog de Romain Guy Android Performance Case Study al hablar de Overdraw dice esto:

Eliminación del fondo de la ventana: el sistema utiliza el fondo definido en su tema para crear ventanas de vista previa al iniciar su aplicación. Nunca lo establezca en null a menos que su aplicación sea transparente. En su lugar, establezca en el color / imagen que desea o deshacerse de onCreate () llamando a getWindow (). SetBackgroundDrawable (null). ***

Sin embargo getWindow (). SetBackgroundDrawable (null) parece no tener ningún efecto. He aquí un ejemplo con el código:

//MainActivity @Override protected void onCreate(Bundle savedInstanceState) { getWindow().setBackgroundDrawable(null); super.onCreate(savedInstanceState); setContentView(R.layout.main); } // main.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginLeft="40dp" android:layout_marginRight="40dp" android:background="#FFE0FFE0" tools:context=".MainActivity" > <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginLeft="40dp" android:layout_marginRight="40dp" android:background="#FFFFFFE0" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="40dp" android:text="@string/hello_world" /> </LinearLayout> // styles.xml <style name="AppTheme" parent="AppBaseTheme"> <item name="android:windowBackground">@color/yellow</item> </style> 

Esta muestra produce los resultados en la imagen. Se puede ver que la capa externa tiene un sobregiro y el color de fondo de la ventana sigue siendo visible. Esperaba que el fondo de la ventana se hubiera ido y sólo el lineralayout para tener overdraw.

Introduzca aquí la descripción de la imagen

Simplemente mueva getWindow().setBackgroundDrawable(null) abajo, hasta cualquier lugar después de setContentView(R.layout.main) ; p.ej:

 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); getWindow().setBackgroundDrawable(null); } 

La setContentView(...) propaga configurando el contenido en la ventana a la que está asociada la actividad y probablemente anula el cambio que quería hacer con setBackgroundDrawable(null) .

Resultado:

Introduzca aquí la descripción de la imagen

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.