12/08/2018, 16:00

Android reduce background overdraw

Trước khi hiểu bài viết dưới, bạn phải biết trước về overdraw ở đây https://developer.android.com/studio/profile/dev-options-overdraw.html Ví dụ Tạo khi tạo mới 1 ứng dụng, set chữ Hello World to lên, bật debug overdraw và chạy app lên sẽ được Sẽ thấy background của màn hình là màu gần ...

Trước khi hiểu bài viết dưới, bạn phải biết trước về overdraw ở đây https://developer.android.com/studio/profile/dev-options-overdraw.html

Ví dụ

Tạo khi tạo mới 1 ứng dụng, set chữ Hello World to lên, bật debug overdraw và chạy app lên sẽ được Sẽ thấy background của màn hình là màu gần trắng (FAFAFA) có mức overdraw là 0, chữ HelloWorld có overdraw là 1. Mọi chuyện đều ổn

Nhưng bây giờ, nếu ta muốn set background của màn hình là trắng tinh luôn (FFFFFF) (hoặc màu khác cũng được) thì thường vào trong xml của MainActivity và set lại màu cho cái root ViewGroup. Chạy lên lại sẽ được Background của màn hình đã là màu trắng, nhưng overdraw của nó đã là 1(bạn tưởng tượng là cái FAFAFA vẽ ra trước xong bạn vẽ cái FFFFFF lên trên), còn cái textview bây giờ đã là 2.

Giải quyết

Trong AppTheme của app, thêm trường android:windowBackground

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    ...
    <item name="android:windowBackground">@null</item>
</style>

Sau khi sửa lại như thế này thì background mặc định của app bạn sẽ có màu mặc định là đen trên hầu hết device, một số device nó có màu khác hay trong màn hình có scroll, nếu bạn scroll nó cũng ra màu khác. Nên sau khi set style như thế này, bạn bắt buộc đi set lại background cho tất cả các màn hình trong app của bạn. Sẽ phải mất thời gian để sửa nhưng app bạn sẽ có performance tốt hơn

Hoặc nếu bạn chắc chắn trong app bạn tất cả các màn hình đều có background là màu trắng thì bạn có thể set luôn cái windowBackground là màu trắng

0