این یک تصور غلط رایج است که استفاده از ساختارهای چیدمان پایه منجر به
کارآمدترین چیدمانها میشود. بااینحال، هر ابزاره و چیدمانی که به برنامهتان اضافه میکنید
به مقداردهی اولیه، چیدمان، و طراحی نیاز دارد. برای مثال، استفاده از نمونههای تودرتو از
LinearLayout
میتواند منجر به سلسلهمراتب نمای بسیار عمیق شود. علاوهبراین، تودرتو کردن چند
نمونه از LinearLayout که از پارامتر layout_weight
استفاده میکنند میتواند بسیار پرهزینه باشد، زیرا هر فرزند باید دو بار اندازهگیری شود.
این موضوع بهویژه زمانی اهمیت دارد که چیدمان بهطور مکرر متورم میشود، مثلاً
وقتی در
RecyclerView استفاده میشود.
این سند نشان میدهد که چگونه از بازرس چیدمان و lint برای بررسی و بهینهسازی چیدمان خود استفاده کنید.
بازرسی چیدمان
ابزارهای کیت توسعه نرمافزار Android شامل ابزار بازرس چیدمان است که به شما امکان میدهد چیدمانتان را درحین اجرای برنامه تجزیهوتحلیل کنید. استفاده از این ابزار به شما کمک میکند ناکارآمدیها را در عملکرد چیدمان پیدا کنید.
«بازرس چیدمان» به شما امکان میدهد فرایندهای درحال اجرا را در دستگاه متصل یا شبیهساز انتخاب کنید، سپس درخت چیدمان را نمایش دهید. چراغهای راهنمایی در هر بلوک نشاندهنده عملکرد «اندازهگیری»، «چیدمان»، و «ترسیم» آن است و به شما کمک میکند مشکلات احتمالی را شناسایی کنید.
برای مثال، شکل ۱ چیدمانی را نشان میدهد که بهعنوان موردی در
RecyclerView استفاده میشود. این چیدمان تصویر بیتمپ کوچکی را در سمت راست
و دو نوشتار پشتهای را در سمت چپ نشان میدهد. بهویژه مهم است که
چیدمانهایی مانند این که چندینبار متورم میشوند بهینهسازی شوند، زیرا
مزایای عملکردی چندبرابر میشود.
RecyclerView.
«بازرس چیدمان» فهرستی از دستگاههای دردسترس و مؤلفههای درحال اجرای آنها را نشان میدهد. مؤلفه موردنظرتان را از برگه Windows انتخاب کنید و روی بازرس چیدمان کلیک کنید تا سلسلهمراتب چیدمان مؤلفه انتخابشده را مشاهده کنید. برای مثال، شکل ۲ چیدمان مورد فهرست نشاندادهشده در شکل ۱ را نشان میدهد.
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» با گزینه فایل > تنظیمات > تنظیمات پروژه پیکربندی کنید. صفحه «پیکربندی بازرسی» با بازرسیهای پشتیبانیشده نشان داده میشود:
Lint میتواند بهطور خودکار برخیاز مشکلات را برطرف کند، برای برخی دیگر پیشنهاد ارائه دهد، و مستقیماً به کد مشکلدار برود تا آن را بررسی کنید.
برای اطلاعات بیشتر، چیدمانها و منبع چیدمان را ببینید.