Производительность Android imageview, 1 или 3 изображения в макете?

#android #performance #memory #imageview #rendering

#Android #Производительность #память #просмотр изображений #рендеринг

Вопрос:

Я хотел бы знать, что более эффективно с точки зрения рендеринга и потребления памяти?

Предположим, что всегда будет видно одно изображение. Что эффективнее иметь 3 изображения в макете и изменять их видимость или программно изменять ImageResource для 1 изображения?

Вот пример:

Случай №1

 <!-- View case 1 -->
<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">

    <ImageView
        android:id="@ id/img1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/img_1" />
    
    <ImageView
        android:id="@ id/img2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/img_2" />
    
    <ImageView
        android:id="@ id/img3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/img_3" />
</LinearLayout>
 

 // Implementation Case #1
fun showImg2() {
    binding.img1.visibility = View.INVISIBLE
    binding.img2.visibility = View.VISIBLE
    binding.img3.visibility = View.INVISIBLE
}
 

Случай № 2

 <!-- View case 2 -->
<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">

    <ImageView
        android:id="@ id/img1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/img_1" />
</LinearLayout>
 

 // Implementation Case #2
fun showImg2() {
    binding.img.setImageResource(R.drawable.img_2)
}
 

Что более эффективно с точки зрения рендеринга и потребления памяти?

Ответ №1:

Очевидно, что случай 2 более эффективен. Если вы конвертируете свои изображения в webp, это будет лучше, чем лучше.

Комментарии:

1. Отлично, не знал, что webp поддерживается в Android. Веб-сервисы CDN, такие как ImageKit, также могут быть полезны. Я бы оставил вопрос здесь, возможно, кто-то сделает некоторые измерения. Я считаю, что случай 1 лучше для процессора, но хуже для памяти, а случай 2 лучше для памяти, но хуже для процессора.