بهینه‌سازی سلسله‌مراتب چیدمان

امتحان کردن روش Compose
Jetpack Compose جعبه‌ابزار واسط کاربر توصیه‌شده برای Android است. با نحوه کار با چیدمان‌ها در Compose آشنا شوید.

این یک تصور غلط رایج است که استفاده از ساختارهای چیدمان پایه منجر به کارآمدترین چیدمان‌ها می‌شود. بااین‌حال، هر ابزاره و چیدمانی که به برنامه‌تان اضافه می‌کنید به مقداردهی اولیه، چیدمان، و طراحی نیاز دارد. برای مثال، استفاده از نمونه‌های تودرتو از LinearLayout می‌تواند منجر به سلسله‌مراتب نمای بسیار عمیق شود. علاوه‌براین، تودرتو کردن چند نمونه از LinearLayout که از پارامتر layout_weight استفاده می‌کنند می‌تواند بسیار پرهزینه باشد، زیرا هر فرزند باید دو بار اندازه‌گیری شود. این موضوع به‌ویژه زمانی اهمیت دارد که چیدمان به‌طور مکرر متورم می‌شود، مثلاً وقتی در RecyclerView استفاده می‌شود.

این سند نشان می‌دهد که چگونه از بازرس چیدمان و lint برای بررسی و بهینه‌سازی چیدمان خود استفاده کنید.

بازرسی چیدمان

ابزارهای کیت توسعه نرم‌افزار Android شامل ابزار بازرس چیدمان است که به شما امکان می‌دهد چیدمانتان را درحین اجرای برنامه تجزیه‌وتحلیل کنید. استفاده از این ابزار به شما کمک می‌کند ناکارآمدی‌ها را در عملکرد چیدمان پیدا کنید.

«بازرس چیدمان» به شما امکان می‌دهد فرایندهای درحال اجرا را در دستگاه متصل یا شبیه‌ساز انتخاب کنید، سپس درخت چیدمان را نمایش دهید. چراغ‌های راهنمایی در هر بلوک نشان‌دهنده عملکرد «اندازه‌گیری»، «چیدمان»، و «ترسیم» آن است و به شما کمک می‌کند مشکلات احتمالی را شناسایی کنید.

برای مثال، شکل ۱ چیدمانی را نشان می‌دهد که به‌عنوان موردی در RecyclerView استفاده می‌شود. این چیدمان تصویر بیت‌مپ کوچکی را در سمت راست و دو نوشتار پشته‌ای را در سمت چپ نشان می‌دهد. به‌ویژه مهم است که چیدمان‌هایی مانند این که چندین‌بار متورم می‌شوند بهینه‌سازی شوند، زیرا مزایای عملکردی چندبرابر می‌شود.

تصویری که یک مورد را در فهرست نشان می‌دهد: یک تصویر و دو نوشتار که به‌صورت عمودی تراز شده‌اند
شکل ۱. چیدمان مفهومی برای موردی در RecyclerView.

«بازرس چیدمان» فهرستی از دستگاه‌های دردسترس و مؤلفه‌های درحال اجرای آن‌ها را نشان می‌دهد. مؤلفه موردنظرتان را از برگه Windows انتخاب کنید و روی بازرس چیدمان کلیک کنید تا سلسله‌مراتب چیدمان مؤلفه انتخاب‌شده را مشاهده کنید. برای مثال، شکل ۲ چیدمان مورد فهرست نشان‌داده‌شده در شکل ۱ را نشان می‌دهد.

تصویری که «بازرس چیدمان» و ترکیب‌بندی LinearLayout را نشان می‌دهد
شکل ۲. سلسله‌مراتب چیدمان برای چیدمان در شکل ۱، بااستفاده از نمونه‌های تودرتوی LinearLayout.

تجدیدنظر در چیدمان شما

چون عملکرد چیدمان قبلی به‌دلیل LinearLayout تودرتو کند می‌شود، می‌توانید با مسطح کردن چیدمان، عملکرد را بهبود بخشید—به‌عبارت دیگر، چیدمان را به‌جای باریک و عمیق، کم‌عمق و عریض کنید. ‫A ConstraintLayout به‌عنوان گره ریشه چنین چیدمان‌هایی را ممکن می‌کند. وقتی این طرح را برای استفاده از ConstraintLayout تبدیل می‌کنید، چیدمان به سلسله‌مراتبی دو سطحی تبدیل می‌شود:

    <androidx.constraintlayout.widget.ConstraintLayout
      xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:app="http://schemas.android.com/apk/res-auto"
      xmlns:tools="http://schemas.android.com/tools"
      android:id="@+id/root"
      android:layout_width="match_parent"
      android:layout_height="52dp"
      android:background="#e4e6e4"
      android:padding="4dp">

      <ImageView
          android:id="@+id/image"
          android:layout_width="48dp"
          android:layout_height="48dp"
          android:background="#5c5c74"
          android:contentDescription="An example box"
          app:layout_constraintBottom_toBottomOf="parent"
          app:layout_constraintStart_toStartOf="parent"
          app:layout_constraintTop_toTopOf="parent" />

      <TextView
          android:id="@+id/title"
          android:layout_width="0dp"
          android:layout_height="0dp"
          android:layout_marginStart="4dp"
          android:background="#745c74"
          app:layout_constraintBottom_toTopOf="@+id/subtitle"
          app:layout_constraintEnd_toEndOf="parent"
          app:layout_constraintStart_toEndOf="@id/image"
          app:layout_constraintTop_toTopOf="parent" />

      <TextView
          android:id="@+id/subtitle"
          android:layout_width="0dp"
          android:layout_height="0dp"
          android:background="#7e8d6e"
          app:layout_constraintBottom_toBottomOf="parent"
          app:layout_constraintEnd_toEndOf="parent"
          app:layout_constraintStart_toStartOf="@id/title"
          app:layout_constraintTop_toBottomOf="@+id/title" />
  </androidx.constraintlayout.widget.ConstraintLayout>
    

بازرسی طرح‌بندی جدید به این شکل است:

تصویری که «بازرس چیدمان سه‌بعدی» را نشان می‌دهد
شکل ۳. حالت سه‌بعدی «بازرس چیدمان».

مزایای این کار چندبرابر می‌شود، زیرا این چیدمان برای هر مورد در فهرست استفاده می‌شود.

بیشتر این تفاوت به‌دلیل استفاده از layout_weight در طراحی LinearLayout است که می‌تواند اندازه‌گیری را کند کند. این یک نمونه از نحوه استفاده مناسب از هر چیدمان است. به‌دقت بررسی کنید که آیا استفاده از وزن چیدمان ضروری است یا نه.

در برخی‌از چیدمان‌های پیچیده، ممکن است سیستم تلاش خود را برای اندازه‌گیری یک عنصر میانای کاربر بیش‌از یک بار هدر دهد. این پدیده مالیات مضاعف نامیده می‌شود. برای کسب اطلاعات بیشتر درباره مالیات مضاعف و نحوه جلوگیری از آن، به سلسله‌مراتب عملکرد و نما مراجعه کنید.

استفاده از پرزگیر

بهتر است ابزار lint را روی فایل‌های چیدمانتان اجرا کنید تا بهینه‌سازی‌های احتمالی سلسله‌مراتب نما را جستجو کنید. Lint جایگزین ابزار layoutopt می‌شود و عملکرد بهتری دارد. موارد زیر نمونه‌هایی از قوانین lint هستند:

  • از drawableهای مرکب استفاده کنید. می‌توانید LinearLayout را که حاوی ImageView و TextView است به‌صورت ترسیم‌شدنی مرکب به‌طور مؤثرتری مدیریت کنید.
  • قاب ریشه را ادغام کنید. اگر ریشه چیدمان FrameLayout باشد که پس‌زمینه یا حاشیه داخلی ارائه نمی‌دهد، می‌توانید آن را با برچسب ادغام جایگزین کنید که کمی کارآمدتر است.
  • برگ‌های بی‌فایده را بردارید. می‌توانید چیدمانی را که فرزند یا پس‌زمینه ندارد بردارید (چون نامرئی است) تا سلسله‌مراتب چیدمان مسطح‌تر و کارآمدتری داشته باشید.
  • والدین بی‌فایده را بردارید. می‌توانید چیدمانی را که فرزند دارد و همزاد ندارد، ScrollView یا چیدمان ریشه نیست، و پس‌زمینه ندارد بردارید. همچنین می‌توانید نمای فرزند را مستقیماً به نمای ولی منتقل کنید تا سلسله‌مراتب چیدمان مسطح‌تر و کارآمدتری داشته باشید.
  • از طرح‌بندی‌های عمیق استفاده نکنید. چیدمان‌هایی که تودرتویی زیادی دارند برای عملکرد بد هستند. برای بهبود عملکرد، از چیدمان‌های مسطح‌تر، مثل ConstraintLayout، استفاده کنید. حداکثر عمق پیش‌فرض برای بررسی‌های lint‏ ۱۰ است.

یکی دیگر از مزایای ابزار lint، ادغام آن در «استودیو Android» است. Lint هرزمان برنامه‌تان را کامپایل کنید به‌طور خودکار اجرا می‌شود. با Android Studio، همچنین می‌توانید بازرسی‌های lint را برای یک تنوع ساخت خاص یا برای همه تنوع‌های ساخت اجرا کنید.

همچنین می‌توانید نمایه‌های بازرسی را مدیریت کنید و بازرسی‌ها را در «استودیو Android» با گزینه فایل > تنظیمات > تنظیمات پروژه پیکربندی کنید. صفحه «پیکربندی بازرسی» با بازرسی‌های پشتیبانی‌شده نشان داده می‌شود:

تصویری که منو «بازرسی‌های استودیو Android» را نشان می‌دهد
شکل ۴. صفحه «پیکربندی بازرسی».

Lint می‌تواند به‌طور خودکار برخی‌از مشکلات را برطرف کند، برای برخی دیگر پیشنهاد ارائه دهد، و مستقیماً به کد مشکل‌دار برود تا آن را بررسی کنید.

برای اطلاعات بیشتر، چیدمان‌ها و منبع چیدمان را ببینید.