Overdraw and Romain Guy в блоге

Основываясь на статье блога о производительности Android для Android от Ромена Гая, когда он говорит о Overdraw, он говорит следующее:

Удаление фона окна: фон, определенный в вашей теме, используется системой для создания окон предварительного просмотра при запуске приложения. Никогда не устанавливайте его равным null, если ваше приложение не прозрачно. Вместо этого установите его цвет / изображение, которое вы хотите или избавитесь от onCreate (), вызвав getWindow (). SetBackgroundDrawable (null). ***

Однако getWindow (). SetBackgroundDrawable (null), кажется, не имеет никакого эффекта. Вот пример с кодом:

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

Этот образец дает результаты на изображении. Вы можете видеть, что внешний слой имеет переиздание, и цвет фона окна все еще отображается. Я ожидал, что фон фона исчезнет, ​​и только lineralayout передернется.

Введите описание изображения здесь

Solutions Collecting From Web of "Overdraw and Romain Guy в блоге"

Просто переместите getWindow().setBackgroundDrawable(null) вниз, где-нибудь после setContentView(R.layout.main) ; например:

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

setContentView(...) распространяется, устанавливая содержимое в окне, к setBackgroundDrawable(null) подключено действие, и, вероятно, переопределяет изменение, которое вы хотели сделать с помощью setBackgroundDrawable(null) .

Результат:

Введите описание изображения здесь