Aex*_*xyn 11 performance android gpu android-layout
为了提高应用程序性能,我遇到了GPU Overdraw问题.根据Romain Guy的文章,这里是基本的颜色:
没有颜色意味着没有透支.像素只涂了一次.在此示例中,您可以看到背景完好无损.
蓝色表示透支1倍.像素被涂了两次.大蓝色区域是可以接受的(如果整个窗口是蓝色的,你可以摆脱一层.)
为了测试它,我使用XML创建一个简单的项目,如下所示
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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity"
android:layout_margin="50dp"
android:background="#fff">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/hello_world"/>
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
得到结果:

然后我尝试了Whatsapp的透支.令我惊讶的是:

那么Whatsapp如何绘制背景壁纸而没有透支(没有蓝色色调),但在我的简单xml中,甚至着色都会给一次透支??
PS:我有意添加了背景颜色,表明添加颜色会过度绘制但添加壁纸则不会
ast*_*etz 27
每个Activity都有一个默认背景Drawable来自Theme的android:windowBackground属性.
WhatsApp使用的背景图像可以在两个方向上重复,以填满整个屏幕.这样他们就不需要为不同屏幕尺寸的不同图像烦恼 - 它的超级响应!
所以假设你有这样的平铺图像(例如drawable-nodpi/background_tile.png)
只需创建一个新的xml Drawable(例如drawable/background.xml),如下所示:
<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/background_tile"
android:tileMode="repeat" />
Run Code Online (Sandbox Code Playgroud)
现在只需将此Drawable设置为Activity的主题的背景:
<style name="AppTheme" parent="Theme.AppCompat.Light">
<item name="android:windowBackground">@drawable/background</item>
</style>
Run Code Online (Sandbox Code Playgroud)
您还可以使用getWindow().setBackgroundDrawable
或在运行时设置Activity的背景Drawable
getWindow().setBackgroundDrawableResource
您还可以将背景Drawable设置为null,例如,如果整个Activity显示MapView或类似的东西.
另请注意,如果活动是您的主要启动器活动,Zygote将在应用启动阶段使用主题的背景Drawable.