نکات و اصول مهم در برنامه نویسی Java/Android
1- هنگامی که دستگاه با وضعیت Low-Memory مواجه می شه، متد onStop()
توسط DVM/ART اندروید نادیده گرفته میشه. پس حتی الامکان برنامه و اطلاعات مهمش رو در متد 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
.
زمانی باید از 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>
مقالات مرتبط
#2 - نکات و اصول مهم در برنامه نویسی Java/Android
#3 - نکات و اصول مهم در برنامه نویسی Java/Android
#4 - نکات و اصول مهم در برنامه نویسی Java/Android
#5 - نکات و اصول مهم در برنامه نویسی Java/Android
#6 - نکات و اصول مهم در برنامه نویسی Java/Android
#7 - نکات و اصول مهم در برنامه نویسی Java/Android
اگر قبلا در بیان ثبت نام کرده اید لطفا ابتدا وارد شوید، در غیر این صورت می توانید ثبت نام کنید.