Overdraw和Romain Guy的博客发布了Android Performance Case Study

时间:2012-12-17 00:30:22

标签: android

根据Romain Guy的博客文章Android Performance Case Study,在谈到透支时,他说:

  

删除窗口背景:系统使用主题中定义的背景在启动应用程序时创建预览窗口。除非您的应用程序是透明的,否则永远不要将其设相反,通过调用getWindow()将其设置为您想要的颜色/图像或从onCreate()中删除.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才能透支。

enter image description here

1 个答案:

答案 0 :(得分:22)

向下移动getWindow().setBackgroundDrawable(null),直到setContentView(R.layout.main)之后的任何地方; e.g:

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

setContentView(...)调用传播设置活动附加到的窗口上的内容,并可能覆盖您对setBackgroundDrawable(null)所做的更改。

结果:

enter image description here