یوشا آل ایوب

وبگاه دست نوشته ها و تجربیات شخصی
بِسمِ اللّه‏ِ الرَّحمنِ الرَّحيمِ

یوشا آل ایوب

وبگاه دست نوشته ها و تجربیات شخصی

یوشا آل ایوب

دکتر مصطفی چمران: می گویند تقوا از تخصص لازمتر است، آنرا می پذیرم، اما می گویم: آنکس که تخصص ندارد و کاری را می پذیرد، بی تقواست!

تبلیغات
Blog.ir بلاگ، رسانه متخصصین و اهل قلم، استفاده آسان از امکانات وبلاگ نویسی حرفه‌ای، در محیطی نوین، امن و پایدار bayanbox.ir صندوق بیان - تجربه‌ای متفاوت در نشر و نگهداری فایل‌ها، ۳ گیگا بایت فضای پیشرفته رایگان Bayan.ir - بیان، پیشرو در فناوری‌های فضای مجازی ایران

همونطور که می دونید، دستگاه های مبتنی بر اندروید (مثل گوشی، تلویزیون، ساعت، دوربین، ربات و...) با محدودیت منابع روبرو هستند... پس در حین خوندن مقالات اندروید اگر با واژه performance بارها و بارها روبرو شدید تعجب نکنید.

 

1- هنگامی که دستگاه با وضعیت Low-Memory مواجه می شه، متد onStop() توسط DVM نادیده گرفته میشه. پس حتاالمکان برنامه و اطلاعات مهمش رو در متد onPause() finalize کنید و نه در متد onStop().

در وضعیت Low-Memory، گاهی استفاده از متد System.runFinalization() و System.gc() می تونه کارساز باشه.

 

2- طبق گفته گوگل، حتاالمکان متد ها رو static تعریف کنید. اینکار سرعت پردازش رو 15 تا 20 درصد افزایش میده.

 

3- URLConnection یا Apache HTTP؟

طبق گفته ی وبلاگ Jesse Wilson، عضو تیم توسعه DVM، Apache HTTP در اندروید Froyo و قبل تر باگهای کمتر و بیشترین سازگاری رو داره. درحالی که UrlConnection در اندروید Gingerbread و جدیدتر باگهای کمتر، امکانات بیشتر، بهینه تر و سازگاری بیشتری رو داره... پس در انتخاب اینها دقت کنید.

4- طبیعتاً کار با primitive نوع int بسیار سریعتر و بصرفه تر از کار با شی نوع Integer هست!

 

5- طبق گفته Sun، IBM، oReilly و Sys-Con حتاالمکان متغیر ها و متد ها رو final تعریف کنید. اینکار performance برنامه رو بسیار افزایش میده.

 

6- در برنامه هایی که activity های متعددی دارید، با بررسی flag های Intent و startActivity مطمعن بشید که هنگام فراخوانی activity، اون رو مجدداً reset نمی کنید و فقط به foreground هدایتش می کنید.

 

7- در همه برنامه ها، exception ها و خطاها رو (در یک متغیر یا فایل) log کنید و توسط فرمی (با اجازه کاربر!) برای سرور/گیرنده خودتون ارسال کنید.

با اینکار یک سیستم bug report مناسب رو پیاده سازی کردید که بسیار به رفع اشکالات و بهبود برنامه تون کمک خواهد کرد.

 

8- هرگز بدون اجازه کابر، برنامه رو update نکنید.

 

9- هرگز بدون آگاهسازی کابر، اطلاعات اینترنتی رو دریافت و ارسال نکنید.

 

10- طبق گفته API doc گوگل، برای چک کردن اتصال اینترنتی(نه Ethernet)، از توابع getActiveNetworkInfo() و isConnected() و کلاس ConnectivityManager استفاده کنید. و درصورت قطع/خاموش بودن router/modem، اون موقع از exception ها کمک بگیرید. نیازی هم به ping کردن به سایت google نیست.

نکته: برای استفاده از این دسته توابع/کلاسها به دسترسی android.permission.ACCESS_NETWORK_STATE نیاز دارید.

 

11- آیا میدونید LayoutOpt لایه های UI برنامه شمارو optimize می کنه؟

 

12- در زمان دانلود یا parse کردن داده های textual، از gZip استفاده کنید. (منظور کمپرس کردن String نیست)

اینکار performance برنامه رو بسیار افزایش میده.

 

13- حتاالمکان از فراخوانی و کار با کلاس اشیا بصورت مستقیم در داخل حلقه ها خودداری کنید.

سعی کنید اونها رو به متغیرها انتقال بدید و بعد متغیر رو وارد حلقه کنید.

 

14- استفاده از StringBuilder یا char array سریعتر و بصرفه تر از استفاده از شی String هستش. (در شرایط یکسان)

همچنین شی String از نوع immutable هستش و امکان استفاده مجدد از اون وجود نداره. اما درعوض می تونید از شی StringBuilder استفاده کنید که اکثر امکانات شی String رو بهتون میده و قابلیت reuse شدن هم داره.

 

15- آیا می دونید ProGuard چیه؟

 

16- application context با activity context متفاوته و هرکدوم باید در جای خودشون استفاده بشن.

برای نمونه، شما باید به دستور Toast، کانتکس نوع application بدید که شی یکبار ساخته بشه و با بسته/مخفی شدن برنامه، پیام و شی ش هم از بین بره. (خود گوگل هم صراحتاً از application context استفاده کرده)

 

17- وقتی که با SQLite کار می کنید، هرگز Index گذاری رو فراموش نکنید.

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

 

18- برای parse کردن XML حتاالمکان از string manipulation بجای XPath استفاده کنید.

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

 

19- طبق گفته گوگل، تصاویر PNG رو توسط برنامه OptiPNG یا PNGCrush بهینه سازی کنید.

این برنامه ها قادرند header های اضافی داخل فایل تصویر رو حذف و تصویر رو compress کنند.

 

20- با استفاده از ابزار Lint گوگل، پروژه اندروید تون رو برای پیدا کردن bug های پنهان/خفیف اسکن کنید.

نکته: این ابزار Lint داخل پکیج ADT plugin گوگل قرار داره.

Project explorer -> right click on project -> Android tools -> [Clear Lint markers]
Project explorer -> right click on project -> Android tools -> [Run Lint: Check for common errors]

 

21- بجای استفاده از Thread های سنگین UI، می تونید از AsyncThread ها استفاده کنید.

 

22- اگر برنامه قراره که زمان زیادی روی screen نمایش داده بشه (مثل خبر خوان ها)، از background رنگ مشکی استفاده کنید.

اینکار مصرف باطری رو به میزان قابل توجهی کاهش میده، مخصوصاً در گوشی ها و تبلت های AMO-LED!

 

23- بجای استفاده از تصویر سیاه از رنگ سیاه #000000 استفاده کنید. بجای استفاده از تصویر سفید از رنگ سفید #FFFFFF استفاده کنید و امثالش... خیلی ها به این نکته ابتدایی توجه نمی کنند و اغلب در برنامه هاشون با مشکل OutOfMemory مواجه میشن.

چون در دستگاه های مبتنی بر Android، تصاویر bitmap (بسته به حجم، کیفیت و resolution) مقدار بسیار زیادی از حافظه دستگاه رو برای پردازش/نمایش اشغال می کنند.

 

24- طبق گفته گوگل، حتاالمکان بصورت مستقیم/directly فیلد های اشیا رو فراخوانی کنید، بجای استفاده از setter/getter.

 

25- بر طبق benchmark های موجود(دستگاه های قدیمی)، در اندروید، پردازش داده نوع float تقریباً 2 برابر کندتر از پردازش داده نوع int هست، درحالیه که در مورد داده نوع double اینطور نیست. پس در بیشتر موارد، نوع double جایگزین خوبی برای نوع float هستش.


26- همیشه وقتی که از کلاس Vibrator, ConnectivityManager و امثالش استفاده می کنید، حتماً حتماً از NULL نبودن مقدار برگشتی توسط این کلاسها مطمعن بشید.

چراکه هیچ تضمینی نیست اینگونه کلاسها از نظر نرم افزاری و سخت افزاری بدون مشکل باشن یا 100% return کنن. مثال:

final ConnectivityManager _connectivityManager = (ConnectivityManager) this.getSystemService("connectivity");

if (_connectivityManager != null)
{
   ...

 

27- حتاالمکان از convertView بجای Adapter.getView() در list adapter ها استفاده کنید.

اینکار به شما اجازه بهره برداری مجدد از view ساخته شده رو میده.

 

28- با implements کردن اینترفیس OnClickListener دیگه نیازی به inline coding و کثیف کاری در متد onCreate() نیست. :)

 

29- چقدر در مورد AtomicBoolean() ها می دونید؟

 

30- وقتی که برای دوربین دستگاه برنامه می نویسید، حتماً چک کنید که دستگاه دوربین داره یا نداره، و اگر هم داره جلو یا عقب! در آخر هم توسط متد release() اون رو آزاد کنید.

 

31- وقتی که می شود byte، پس چرا int؟ وقتی که می شود short پس چرا int؟

private static final byte DIALOG_UPDATE = 1, DIALOG_HELP = 2, DIALOG_EXIT = 3;

 

32- طبق گفته گوگل، حتاالمکان از حلقه enhanced for (یا همون for each) بجای حلقه for استفاده کنید.

اینکار سرعت پردازش حلقه رو تا 3 برابر افزایش میده.

 

33- همیشه تگ android:targetSdkVersion در فایل AndroidManifest.xml رو تعریف کنید و بحالت بیشفرض رها نکنید.

 

34- در مقدار دهی به تگ android:launchMode در فایل AndroidManifest.xml دقت کنید. این تگ وضعیت instance اون activity رو تعیین می کنه!

 

35- همیشه/حتاالمکان مقدار تگ android:allowClearUserData رو true قرار بدید.

 

36- حتاالمکان مقدار تگ install location رو both قرار بدید تا کاربر بتونه برنامه رو در محل موردنظرش نصب کنه.

 

37- طبق گفته کتاب معروف Professional Android 4 Development، دستور Toast باید در UI Threat ساخته و نمایش داده بشه، درغیر این صورت ریسک پرتاپ شدن استثنا cross-thread وجود خواهد داشت:

public static final void iToast(final Activity context, final String message)
{
    context.runOnUiThread(new Runnable()
    {
        public void run()
        {
            Toast.makeText(context.getApplication(), message, Toast.LENGTH_LONG).show();
        }
    });

    return;
}

 

38- آیا می دونید Bitmap ها در اندروید قبل از Honeycomb در حافظه Native Heap ذخیره می شن ولی در اندروید Honeycomb به بعد در حافظه VM Heap؟

 

39- هرگز بدون اجازه کابر، SMS و MMS ارسال نکنید!

 

40- در بعضی موارد با اضافه کردن تگهای زیر در خط دوم فایل AndroidManifiest.xml، مشکل Couldn't resolve resource... برطرف خواهد شد:

<?xml version="1.0" encoding="utf-8"?>

<!DOCTYPE xml>
موافقین ۱ مخالفین ۰ ۹۴/۰۴/۱۳

نظرات (۰)

هیچ نظری هنوز ثبت نشده است
کاربران بیان میتوانند بدون نیاز به تأیید، نظرات خود را ارسال کنند.
اگر قبلا در بیان ثبت نام کرده اید لطفا ابتدا وارد شوید، در غیر این صورت می توانید ثبت نام کنید.