کاغذ اسپلش
ورقه آغازین یا این که splash screen ابدا معنا جدیدی محسوب نمیشود، ولی تحت عنوان اولیه چیزی که یوزرها در نرم افزار ما می بینند، در صورتیکه به طراحی اپلیکیشن در مشهد صحت پیادهسازی نشده باشد، به طرزی واضح زشت خواهد بود.
برای مثالً ممکن میباشد از یک کارتن ورودی 5 ثانیهای قشنگ به کار گیری کرده باشید که هر توشه مخاطب نرم افزار را گشوده مینماید به او اکران داده می شود. همینطور ممکن میباشد ما یحتاج باشد قبل از آن که بتوان چیز معناداری به استفاده کننده اکران اعطا کرد، برخی دادهها وجود داشته باشند که بایستی دانلود شوند. ولی در صورتیکه تا به امروز برگهای به نرم افزار اضافه کرده باشید که صرفا وظیفه آن مسدودسازی استفاده کننده از حصول سریع به شیت اساسی نرم افزار بوده میباشد، عالی میباشد در شیوههای خویش تجدیدنظر نمائید، زیرا امروزه طرزهای بهتری هم برای حل این مشکل ها وجود داراهستند.
نرم افزارهای اندرویدی قبل از آن که مشی ()onCreate اول اکتیویتی فراخوانی خواهد شد، به بازه زمانی هنگامی برای بار گذاری نیاز داراهستند. در زمان این بازه زمانی پوسته windowBackground نرم افزار روی برگه ترسیم میگردد. شایسته ترین کاغذ اسپلش تنهاً یک پسمورد سفارشی drawable برای پوسته میباشد که در لحظه ساخت اول اکتیویتی override میگردد.
کلام آخری
با این که نرم افزارهای غالب امروزی جنبههای مختلفی دارا هستند، البته درین نوشتهعلمی به رسیدگی چهار گزینه از مواقعی که احتمالاً میقدرت دربارهی هر نرم افزار اندرویدی جاری ساختن کرد پرداختیم. آنهارا میاقتدار به طور یک الزام مقدماتی برای یک دستسازی تجربیات کاربری نرم افزار در شم و حالا کلی اندروید در لحاظ گرفت. با این که پیادهسازی بعضی از این مفاد مستلزم نرمافزارریزی و کارایی پیاده سازی بیشتری میباشد، ولی مطمئن باشید این موضوعی وجود ندارد که بتوان در زمینه ی آن محافظهکاری به خرج اعطا کرد. سود ساخت نرم افزارهایی که بخشی طبیعی از سیستم استدلال به حیث میرسند، پدید وارد شدن یک اکوسیستم بالغخیس میباشد و همه ما می بایست به آن سمت تکان کنیم.
تأثیر Enum بر کارایی نرم افزار اندروید – راهنمای کاربردی
در طول عمل روی نرم افزارهای اندرویدی در مورد ها گوناگون از اشکال Enums استعمال میکنیم، زیرا کارآمد می باشند، البته ممکن میباشد تأثیر بی نقص آنهارا روی نرم افزار اندرویدی ندانید. Enum-ها یک طرز سهل محسوب میشوند، ولی متأسفانه وقتی که به مصرف یاد آنها و سرعتشان نگاه می کنیم نتیجه ها خوشایندی نمی بینیم. درین نوشتهیعلمی به تحقیق تأثیر Enums بر کوشش نرم افزار اندروید میپردازیم.
Enum چیست؟
Enum در جاوا یک نوع داده میباشد که دربرگیرنده دسته مشخصی از اثباتها میباشد. این یک نوع داده خاص میباشد که به ما قابلیت و امکان میدهد یک متغیر را روی یک کدام از مقادیر اثبات از پیش انتخابگردیده تهیه و تنظیم کنیم. متغیر آن بایستی موازی با یک کدام از مقادیری باشد که از گذشته برایش تعریف و تمجید گردیدهاست.
کلیک فرمایید
چرا بایستی از Enum استعمال کنیم؟
ما از Enum در مواقعی به کارگیری می کنیم که یک متغیر بتواند فقط یک مقدار را از دربین یک دسته از مقادیر ممکن بگیرد. به نمونه پایین دقت نمایید:
1public enum Fruits{ Apple, Bannana, Grape, Mango }
در حال حاضر enum به اسم Fruits صرفا یک مقدار می تواند بگیرد و هیچ مقدار دیگری به جز آن چه برایش تمجید گردیده است نیست. ولی درصورتی که از یکی درست یا این که اثبات فنای به کارگیری کنیم، ممکن میباشد اثباتهای غیرمجازی را به آن ارسال کنیم. براین اساس برای خودداری از این خطاهای اثبات غیرمجاز و برای ارتقا بررسی ها در طول کامپایل در کل از یک enum به کارگیری میکنیم.
هزینه Enum-ها
مقادیر Enum در مقایسه با یک اثبات int یاد بیشتری مصرف مینمایند. اضافه کردن یک Enum منفرد موجب ارتقاء اندازه فولدر DEX آخری به واحد سنجش 13 موازی در قیاس با استعمال از اثبات درست میشود. عامل این فرمان آن میباشد که هر مقدار در یک کلاس Enum تحت عنوان یک شیء تلقی میگردد و هر مقدار بخشی از خاطر هیپ را برای ارجاع به شیء اشغال مینماید. این موقعیت موجب مصرف شدن خاطر متعددی میگردد.
شاید حتی اگاهی نداشته باشید که به کارگیری از Enum موجب تأثیر روی سعی نرم افزار می شود. شاید تایپ کردن یک یا این که دو enum روی کوشش کلی نرم افزار تأثیر قابل توجهی نداشته باشد، ولی درصورتیکه از برخی کلاسهای Enum در نرم افزار خویش استعمال میکنید و بعضی کتابخانهها وجود داراهستند که از کلاسهای Enum دیگری به کارگیری مینمایند، به طور کلی تأثیر عمدهای روی نرم افزار داشته باشند و اندازه پوشه را ارتقاء داده و روی کوشش نرم افزار نیز تأثیر سوئی بگذارند.
نکته: کلاً به کارگیری از Enum-ها در هیچ بخشی از کد نرم افزار پیشنهاد نمی شود.
راه حل
اندروید از طیف متنوعی از کنارهنویسیها از روش کتابخانه Annotations Support تامین مینماید. از روش پکیج android.support.annotation میتوانید بهاین کتابخانه دسترسی داشته باشید. این کتابخانه کنارهنویسی از نوع TypeDef دارااست. این لبهنویسی وجود یک پارامتر خاصی، مقدار بازگشتی، یا این که فیلدی که به دسته خاصی از اثباتها ارجاع میدهد را ضمانت مینماید. همینطور موجب می شود کامل شدن کد به طور خود کار، اثباتهای مجاز را سفارش نماید.
IntDef@ و StringDef@ دو آیتم از لبهنویسیهای اثبات می باشند که می توانند به مکان enums برای اثباتهای int و حرفهای به کارگیری شوند و موجب ایمنی فرصت build میگردند. این کنارهنویسیها به ما یاری مینمایند که آرگومانهای متغیر را به روشی مانند enum-ها در طول کامپایل رسیدگی کنیم.
چهطور از Annotations به کار گیری کنیم؟
این زمینه را با طرح یک نمونه رسیدگی میکنیم. فرض فرمایید کلاس Fruit را با دستهای از اثباتهای int داریم. بدین ترتیب در حین ساخت شیء بایستی مقدار نوع int را از گروه جانور ارسال کنیم. البته در روال main یک مقدار ارسال میکنیم که در گروه اثباتها نیست و باعث به وضعیت خلل سازی می گردد. در قطعه کد پایین هیچ نوع «امنیت نوع» (type safety) نیست:
1public class Fruit {
2 public static final int APPLE = 0;
3 public static final int BANNANA = 1;
4 public static final int GRAPE = 2;
5 public static final int MANGO = 3;
6public Fruit(int fruit) {
7 System.out.println("Fruit Selected:" + fruit);
8 }
9public static void main(String[] args) {
10 //Passing Invalid value
11 Fruit fruit = new Fruit(4);
12 }
13}
درپی پیادهسازی کد مشابهی وجود دارااست که از enums به طور تحت استعمال مینماید:
1public class EnumFruit {
2 public EnumFruit(Fruit fruit) { .
3 System.out.println("Fruit selected is:" + fruit);
4 }
5public enum Fruit {
6 APPLE, BANNANA, GRAPE, MANGO
7 }
8public static void main(String[] args) {
9 EnumFruit enumFruitInstance = new EnumFruit(Fruit.APPLE);
10 }
11}
تعلق کنارهنویسی مدد را در build.gradle سطح نرم افزار اضافه می کنیم:
1dependencies {
2 implementation \'com.android.support:support-annotations:28.0.0\'
3}
اثباتها و IntDef@ را برای این اثباتها اعلان می کنیم:
1public class AnnotationFruit {
2 public static final int APPLE = 0;
3 public static final int BANNANA = 1;
4 public static final int GRAPE = 2;
5 public static final int MANGO = 3;
6
7 public AnnotationFruit(@Fruit int fruit) {
8 System.out.println("Fruit Selected is :" + fruit);
9 }
10@IntDef({APPLE, BANNANA, GRAPE, MANGO})
11 @Retention(RetentionPolicy.SOURCE)
12 public @interface Fruit {}
13public static void main(String[] args) {
14 AnnotationFruit annotationSeason = new AnnotationFruit(GRAPE);
15 }
16}
مشاهده بدون نقص کدها
در نمونه فوق کنارهنویسی Typedef از موردها ذیل به کار گیری مینماید:
از interface@ برای اعلان نوع لبهنویسی شمارشی تازه به کارگیری مینماید.
از لبهنویسیهای IntDef@ و StringDef@ یار با Retentio@ به کار گیری مینماید که برای تعریف و تمجید نوع شمارشی ضروری میباشند.
کنارهنویسی Retention(RetentionPolicy.SOURCE)@ به کامپایلر اعلام مینماید که دادههای لبهنویسی شمارشی را در پوشه .class ذخیره نکند.
Setter-ها و getter-ها را میاقتدار به طور ذیل تعریفوتمجید کرد:
1// Decorate the target methods with the annotation
2 @Fruit
3 public abstract int getFruitName();
4// Attach the annotation
5 public abstract void setFruitName(@Fruit int fuitValue);
درصورتی که Proguard به صدق تنظیمات گردیده باشد، قادر است enum-ها را به نیابت از ما در پارهای یا این که اکثری از وضعیتها به طور مقادیر int با صرفهسازی نماید. براین اساس مکان نگرانی نیست.
صحبت نهایی
Enum-ها در مقایسه با اثباتهای بی آلایش دستکم دو موازی به بایتهای اندازه کلی APK اضافه مینمایند و در مقایسه با اثباتهای مساوی حدود 5 تا 10 موازی RAM بیشتری اشغال مینمایند. از این رو در حالتیکه می خواهید نرم افزار شما از حیث مصرف یاد و همت باصرفه باشد، بایستی از به کار گیری از enum-ها در کد خویش اجتناب فرمائید.
کاغذ اسپلش
ورقه آغازین یا این که splash screen ابدا معنا جدیدی محسوب نمیشود، ولی تحت عنوان اولیه چیزی که یوزرها در نرم افزار ما می بینند، در صورتیکه به طراحی اپلیکیشن در مشهد صحت پیادهسازی نشده باشد، به طرزی واضح زشت خواهد بود.
برای مثالً ممکن میباشد از یک کارتن ورودی 5 ثانیهای قشنگ به کار گیری کرده باشید که هر توشه مخاطب نرم افزار را گشوده مینماید به او اکران داده می شود. همینطور ممکن میباشد ما یحتاج باشد قبل از آن که بتوان چیز معناداری به استفاده کننده اکران اعطا کرد، برخی دادهها وجود داشته باشند که بایستی دانلود شوند. ولی در صورتیکه تا به امروز برگهای به نرم افزار اضافه کرده باشید که صرفا وظیفه آن مسدودسازی استفاده کننده از حصول سریع به شیت اساسی نرم افزار بوده میباشد، عالی میباشد در شیوههای خویش تجدیدنظر نمائید، زیرا امروزه طرزهای بهتری هم برای حل این مشکل ها وجود داراهستند.
نرم افزارهای اندرویدی قبل از آن که مشی ()onCreate اول اکتیویتی فراخوانی خواهد شد، به بازه زمانی هنگامی برای بار گذاری نیاز داراهستند. در زمان این بازه زمانی پوسته windowBackground نرم افزار روی برگه ترسیم میگردد. شایسته ترین کاغذ اسپلش تنهاً یک پسمورد سفارشی drawable برای پوسته میباشد که در لحظه ساخت اول اکتیویتی override میگردد.
کلام آخری
با این که نرم افزارهای غالب امروزی جنبههای مختلفی دارا هستند، البته درین نوشتهعلمی به رسیدگی چهار گزینه از مواقعی که احتمالاً میقدرت دربارهی هر نرم افزار اندرویدی جاری ساختن کرد پرداختیم. آنهارا میاقتدار به طور یک الزام مقدماتی برای یک دستسازی تجربیات کاربری نرم افزار در شم و حالا کلی اندروید در لحاظ گرفت. با این که پیادهسازی بعضی از این مفاد مستلزم نرمافزارریزی و کارایی پیاده سازی بیشتری میباشد، ولی مطمئن باشید این موضوعی وجود ندارد که بتوان در زمینه ی آن محافظهکاری به خرج اعطا کرد. سود ساخت نرم افزارهایی که بخشی طبیعی از سیستم استدلال به حیث میرسند، پدید وارد شدن یک اکوسیستم بالغخیس میباشد و همه ما می بایست به آن سمت تکان کنیم.
تأثیر Enum بر کارایی نرم افزار اندروید – راهنمای کاربردی
در طول عمل روی نرم افزارهای اندرویدی در مورد ها گوناگون از اشکال Enums استعمال میکنیم، زیرا کارآمد می باشند، البته ممکن میباشد تأثیر بی نقص آنهارا روی نرم افزار اندرویدی ندانید. Enum-ها یک طرز سهل محسوب میشوند، ولی متأسفانه وقتی که به مصرف یاد آنها و سرعتشان نگاه می کنیم نتیجه ها خوشایندی نمی بینیم. درین نوشتهیعلمی به تحقیق تأثیر Enums بر کوشش نرم افزار اندروید میپردازیم.
Enum چیست؟
Enum در جاوا یک نوع داده میباشد که دربرگیرنده دسته مشخصی از اثباتها میباشد. این یک نوع داده خاص میباشد که به ما قابلیت و امکان میدهد یک متغیر را روی یک کدام از مقادیر اثبات از پیش انتخابگردیده تهیه و تنظیم کنیم. متغیر آن بایستی موازی با یک کدام از مقادیری باشد که از گذشته برایش تعریف و تمجید گردیدهاست.
کلیک فرمایید
چرا بایستی از Enum استعمال کنیم؟
ما از Enum در مواقعی به کارگیری می کنیم که یک متغیر بتواند فقط یک مقدار را از دربین یک دسته از مقادیر ممکن بگیرد. به نمونه پایین دقت نمایید:
1public enum Fruits{ Apple, Bannana, Grape, Mango }
در حال حاضر enum به اسم Fruits صرفا یک مقدار می تواند بگیرد و هیچ مقدار دیگری به جز آن چه برایش تمجید گردیده است نیست. ولی درصورتی که از یکی درست یا این که اثبات فنای به کارگیری کنیم، ممکن میباشد اثباتهای غیرمجازی را به آن ارسال کنیم. براین اساس برای خودداری از این خطاهای اثبات غیرمجاز و برای ارتقا بررسی ها در طول کامپایل در کل از یک enum به کارگیری میکنیم.
هزینه Enum-ها
مقادیر Enum در مقایسه با یک اثبات int یاد بیشتری مصرف مینمایند. اضافه کردن یک Enum منفرد موجب ارتقاء اندازه فولدر DEX آخری به واحد سنجش 13 موازی در قیاس با استعمال از اثبات درست میشود. عامل این فرمان آن میباشد که هر مقدار در یک کلاس Enum تحت عنوان یک شیء تلقی میگردد و هر مقدار بخشی از خاطر هیپ را برای ارجاع به شیء اشغال مینماید. این موقعیت موجب مصرف شدن خاطر متعددی میگردد.
شاید حتی اگاهی نداشته باشید که به کارگیری از Enum موجب تأثیر روی سعی نرم افزار می شود. شاید تایپ کردن یک یا این که دو enum روی کوشش کلی نرم افزار تأثیر قابل توجهی نداشته باشد، ولی درصورتیکه از برخی کلاسهای Enum در نرم افزار خویش استعمال میکنید و بعضی کتابخانهها وجود داراهستند که از کلاسهای Enum دیگری به کارگیری مینمایند، به طور کلی تأثیر عمدهای روی نرم افزار داشته باشند و اندازه پوشه را ارتقاء داده و روی کوشش نرم افزار نیز تأثیر سوئی بگذارند.
نکته: کلاً به کارگیری از Enum-ها در هیچ بخشی از کد نرم افزار پیشنهاد نمی شود.
راه حل
اندروید از طیف متنوعی از کنارهنویسیها از روش کتابخانه Annotations Support تامین مینماید. از روش پکیج android.support.annotation میتوانید بهاین کتابخانه دسترسی داشته باشید. این کتابخانه کنارهنویسی از نوع TypeDef دارااست. این لبهنویسی وجود یک پارامتر خاصی، مقدار بازگشتی، یا این که فیلدی که به دسته خاصی از اثباتها ارجاع میدهد را ضمانت مینماید. همینطور موجب می شود کامل شدن کد به طور خود کار، اثباتهای مجاز را سفارش نماید.
IntDef@ و StringDef@ دو آیتم از لبهنویسیهای اثبات می باشند که می توانند به مکان enums برای اثباتهای int و حرفهای به کارگیری شوند و موجب ایمنی فرصت build میگردند. این کنارهنویسیها به ما یاری مینمایند که آرگومانهای متغیر را به روشی مانند enum-ها در طول کامپایل رسیدگی کنیم.
چهطور از Annotations به کار گیری کنیم؟
این زمینه را با طرح یک نمونه رسیدگی میکنیم. فرض فرمایید کلاس Fruit را با دستهای از اثباتهای int داریم. بدین ترتیب در حین ساخت شیء بایستی مقدار نوع int را از گروه جانور ارسال کنیم. البته در روال main یک مقدار ارسال میکنیم که در گروه اثباتها نیست و باعث به وضعیت خلل سازی می گردد. در قطعه کد پایین هیچ نوع «امنیت نوع» (type safety) نیست:
1public class Fruit {
2 public static final int APPLE = 0;
3 public static final int BANNANA = 1;
4 public static final int GRAPE = 2;
5 public static final int MANGO = 3;
6public Fruit(int fruit) {
7 System.out.println("Fruit Selected:" + fruit);
8 }
9public static void main(String[] args) {
10 //Passing Invalid value
11 Fruit fruit = new Fruit(4);
12 }
13}
درپی پیادهسازی کد مشابهی وجود دارااست که از enums به طور تحت استعمال مینماید:
1public class EnumFruit {
2 public EnumFruit(Fruit fruit) { .
3 System.out.println("Fruit selected is:" + fruit);
4 }
5public enum Fruit {
6 APPLE, BANNANA, GRAPE, MANGO
7 }
8public static void main(String[] args) {
9 EnumFruit enumFruitInstance = new EnumFruit(Fruit.APPLE);
10 }
11}
تعلق کنارهنویسی مدد را در build.gradle سطح نرم افزار اضافه می کنیم:
1dependencies {
2 implementation \'com.android.support:support-annotations:28.0.0\'
3}
اثباتها و IntDef@ را برای این اثباتها اعلان می کنیم:
1public class AnnotationFruit {
2 public static final int APPLE = 0;
3 public static final int BANNANA = 1;
4 public static final int GRAPE = 2;
5 public static final int MANGO = 3;
6
7 public AnnotationFruit(@Fruit int fruit) {
8 System.out.println("Fruit Selected is :" + fruit);
9 }
10@IntDef({APPLE, BANNANA, GRAPE, MANGO})
11 @Retention(RetentionPolicy.SOURCE)
12 public @interface Fruit {}
13public static void main(String[] args) {
14 AnnotationFruit annotationSeason = new AnnotationFruit(GRAPE);
15 }
16}
مشاهده بدون نقص کدها
در نمونه فوق کنارهنویسی Typedef از موردها ذیل به کار گیری مینماید:
از interface@ برای اعلان نوع لبهنویسی شمارشی تازه به کارگیری مینماید.
از لبهنویسیهای IntDef@ و StringDef@ یار با Retentio@ به کار گیری مینماید که برای تعریف و تمجید نوع شمارشی ضروری میباشند.
کنارهنویسی Retention(RetentionPolicy.SOURCE)@ به کامپایلر اعلام مینماید که دادههای لبهنویسی شمارشی را در پوشه .class ذخیره نکند.
Setter-ها و getter-ها را میاقتدار به طور ذیل تعریفوتمجید کرد:
1// Decorate the target methods with the annotation
2 @Fruit
3 public abstract int getFruitName();
4// Attach the annotation
5 public abstract void setFruitName(@Fruit int fuitValue);
درصورتی که Proguard به صدق تنظیمات گردیده باشد، قادر است enum-ها را به نیابت از ما در پارهای یا این که اکثری از وضعیتها به طور مقادیر int با صرفهسازی نماید. براین اساس مکان نگرانی نیست.
صحبت نهایی
Enum-ها در مقایسه با اثباتهای بی آلایش دستکم دو موازی به بایتهای اندازه کلی APK اضافه مینمایند و در مقایسه با اثباتهای مساوی حدود 5 تا 10 موازی RAM بیشتری اشغال مینمایند. از این رو در حالتیکه می خواهید نرم افزار شما از حیث مصرف یاد و همت باصرفه باشد، بایستی از به کار گیری از enum-ها در کد خویش اجتناب فرمائید.

راهکارهای کاهش CPC در کمپینها