بهینه سازی نمای سفارشی

وقتی یک نمای خوب طراحی شده دارید که به حرکات و انتقال بین حالت‌ها پاسخ می‌دهد، مطمئن شوید که نمای سریع اجرا می‌شود. برای جلوگیری از کندی یا وقفه در رابط کاربری هنگام پخش، مطمئن شوید که انیمیشن‌ها به طور مداوم با سرعت ۶۰ فریم در ثانیه اجرا می‌شوند.

سرعت مشاهده خود را افزایش دهید

برای سرعت بخشیدن به نمایش خود، کدهای غیرضروری را از روال‌هایی که مرتباً فراخوانی می‌شوند حذف کنید. با onDraw() شروع کنید، که بیشترین بازدهی را برای شما دارد. به طور خاص، تخصیص‌ها را در onDraw() حذف کنید، زیرا تخصیص‌ها ممکن است منجر به جمع‌آوری زباله شود که باعث وقفه می‌شود. اشیاء را در حین مقداردهی اولیه یا بین انیمیشن‌ها تخصیص دهید. هرگز در حالی که یک انیمیشن در حال اجرا است، تخصیصی انجام ندهید.

علاوه بر ساده‌تر کردن onDraw() ، مطمئن شوید که تا حد امکان کمتر فراخوانی شود. اکثر فراخوانی‌های onDraw() نتیجه فراخوانی تابع invalidate() هستند، بنابراین فراخوانی‌های غیرضروری تابع invalidate() را حذف کنید.

یکی دیگر از عملیات بسیار پرهزینه، پیمایش طرح‌بندی‌ها است. وقتی یک نما requestLayout() را فراخوانی می‌کند، سیستم رابط کاربری اندروید کل سلسله مراتب نما را پیمایش می‌کند تا بفهمد هر نما چقدر باید بزرگ باشد. اگر اندازه‌گیری‌های متناقضی پیدا کند، ممکن است چندین بار سلسله مراتب را پیمایش کند. طراحان رابط کاربری گاهی اوقات سلسله مراتب عمیقی از اشیاء ViewGroup تو در تو ایجاد می‌کنند. این سلسله مراتب نمای عمیق باعث مشکلات عملکردی می‌شوند، بنابراین سلسله مراتب نمای خود را تا حد امکان کم‌عمق کنید.

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

برای مثال، اگر یک ViewGroup سفارشی دارید که اندازه خود را برای تناسب با تمام نماهای فرزند خود تنظیم نمی‌کند، از سربار اندازه‌گیری تمام نماهای فرزند جلوگیری می‌کنید. این بهینه‌سازی در صورت استفاده از طرح‌بندی‌های از پیش ساخته شده که طیف وسیعی از موارد استفاده را پوشش می‌دهند، امکان‌پذیر نیست.