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