یوشا

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

یوشا

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

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

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

1- فراموش نکنید که مقدار صفت android:updatePeriodMillis در تگ <appwidget-provider فایل xml/widget_info.xml بیانگر تایمری هست که کالبک onUpdate کلاس ویدجت صدا زده میشه.

 

2- در metadata ویدجت، مقدار صفت android:minHeight و android:minWidth تعیین کننده حداقل اندازه ویدجت هستش که باید 72dp (یعنی 1x1) باشه. ولی صفت android:layout_width و android:layout_height در layout ویدجت، تعیین کننده اندازه کنونی ویدجت هستش.

 

3- از انجایی که List متدی برای اضافه کردن عنصر نداره و سایزش هم ثابت هست، برای تبدیل Array به ArrayList باید به این روش عمل کنید:

ArrayList<String> _arrayList = new ArrayList<String>(Arrays.asList(myArray));

 

4- برای چک کردن وجود یک مقدار در آرایه کافیست به این صورت عمل کنید:

Arrays.asList(myArray).contains(targetValue);

 

5- نکته جزیی: فراموش نکنید که HashMap در جاوا در واقع همون data structure هستش و نه آرایه!

6- نکته جزیی: زمانی از LinkedList استفاده کنید که قراره تعداد بسیار زیادی عملیات add/remove انجام بشه و نه عملیات random access.

 

7- مزایای استفاده از dependency injection در طراحی کلاس/متد:

  • تمیز شدن کد و افزایش خوانایی کد
  • آزاد شدن اتصالات و روابط کلاسها(loosely coupled)
  • افزایش reusable شدن کد
  • ساده شدن فرایند test کد

 

8- همیشه در طراحی لیست/آرایه Boolean از BitSet استفاده کنید. BitSet سی پی یو و مموری cache friendly هستش.

 

9- آیا می دونید در اندروید کانال STDOUT و STRERR یا همون System.out و System.err به /dev/null/ منتقل میشن؟

 

10- آیا می دونید String x = new String("abc"); با String y = new String("abc"); برابر(==) نیست؟

چون آدرس(رفرنس) هرکدوم در حافظه متفاوت هست.

 

11- هیچ کدام از کالبک های موجود در کلاس ویدجت(AppWidgetProvider) نیاز به صدازدن Superclass ها ندارن، بجز کالبک onReceive. (چون خالی هستن)

 

12- درکجا باید از Context نوع Application و درکجا باید Context نوع Activity استفاده کرد:

 

مورد/نوع Application Activity
Toast X  
Dialogs / Views   X
Intent/Activity   X
Layout inflation   X
Service X  
Send broadcast X X
Broadcast Receiver X X
Resource values X  

 

13- نکته جزیی: آیا می دونید android.util.Patterns.IP_ADDRESS فقط IPv4 رو شامل میشه؟

 

14- نکته جزیی: با uninstall شدن برنامه، cache و تنظیمات برنامه هم حذف خواهند شد.

 

15- توسط متد ActivityManager.clearApplicationUserData() در اندروید 4.4 به بعد می تونید data تنظیمات برنامه رو حذف کنید.

 

16- هنگام کار با WebView، برای امنیت بیشتر بهتره تنظیمات setJavaScriptEnabled, setGeolocationEnabled, setAllowFileAccess رو false قرار بدید.

 

17- برنامه هایی که با یک کلید Sign شده و همگی از shared user Id یکسانی استفاده می کنن(در فایل AndroidManifest.xml) می تونن از فایلهای private یکدیگر استفاده کنن.

 

18- از اونجایی که جاوا از optional parameter پشتیبانی نمی کنه، به روش زیر می تونید این قابلیت رو شبیه سازی کنید:

public void myMethod(final Object object, final boolean... enabled)
{
    // ...

    if (enabled[0])
    {
        // خخخخخخ
    }

    return;
}

 

19- سعی کنید متغیرهای کلاس رو در خارج از متد constructor آماده سازی/Initialize کنید. (اینها مقادیر پیشفرض دارن و حتی قبل از اینکه سازنده کلاس صدا زده بشه مقدار دهی می شوند. پس دوباره به اونها مقدار ندید. بعلاه خوانایی کلاس راحت تر و سریع تر انجام میشه)

 

20- صفت android:layout_gravity محل قرار گیری (کل) ویدجت رو تعیین می کنه و صفت android:gravity محل قرارگیری محتوای ویدجت رو تعیین می کنه.

 

21- یادتون باشه که: فایلهای layout فقط برای طراحی قالب و چهارچوب صفحات برنامه هستن، styles.xml برای شکل دهی به عناصر قالب، dimens.xml برای تعیین اندازه و ابعاد عناصر، colors.xml برای رنگ بندی عناصر، strings.xml برای متون موجود در عناصر و... هستند. پس در ترکیب و قرارگیری اینها دقت کنید.

 

22- تغییر رفتار و امکانات keyboard اندروید در مقابل مقدار صفت inputype عنصر EditText:

<EditText android:id="@+id/et_test" android:inputType="?????"/>
نوع inputtype نوع Keyboard رفتار دکمه Enter شکلک Case حروف Suggestion کاراکترهای اضافی
textLongMessage الفبا / پیشفرض ارسال / بعدی دارد lowercase دارد , و . و همه چیز
textFilter الفبا / پیشفرض ارسال / بعدی دارد lowercase ندارد , و . و همه چیز
textCapWords الفبا / پیشفرض ارسال / بعدی دارد Camel Case دارد , و . و همه چیز
textCapSentences الفبا / پیشفرض ارسال / بعدی دارد Sentence case دارد , و . و همه چیز
time اعداد ارسال / بعدی ندارد - ندارد فقط :
textMultiLine الفبا / پیشفرض خط بعدی دارد lowercase دارد , و . و همه چیز
number اعداد ارسال / بعدی ندارد - ندارد ندارد
textEmailAddress الفبا / پیشفرض ارسال / بعدی ندارد lowercase ندارد @ و . و همه چیز
بدون نوع الفبا / پیشفرض خط بعدی دارد lowercase دارد , و . و همه چیز
textPassword الفبا / پیشفرض ارسال / بعدی ندارد lowercase ندارد , و . و همه چیز
text الفبا / پیشفرض ارسال / بعدی دارد lowercase دارد , و . و همه چیز
textShortMessage الفبا / پیشفرض شکلک دارد lowercase دارد , و . و همه چیز
textUri الفبا / پیشفرض ارسال / بعدی ندارد lowercase ندارد / و . و همه چیز
textCapCharacters الفبا / پیشفرض ارسال / بعدی دارد UPPERCASE دارد , و . و همه چیز
phone اعداد ارسال / بعدی ندارد - ندارد * # . -  / () W P N , +
textPersonName الفبا / پیشفرض ارسال / بعدی دارد lowercase دارد , و . و همه چیز

نکته: در صورتی که تنظیم Auto-capitalization در تنظیمات Keyboard فعال باشه، Case حروف رفتار پیشفرض خواهد داشت، در غیر اینصورت همه حروف کوچیک خواهند شد.

نکته 2: زبان نوع Keyboard اعداد همگی انگلیسی 1234567890 می باشد.

نکته 3: در صورتی که تنظیم Correction/Suggestion در تنظیمات Keyboard فعال باشه، Suggestion بدرستی رفتار خواهد کرد، درغیر اینصورت در همه موارد خاموش خواهد ماند.

 

23- مقدار center با مقدار center_vertical|center_horizontal و مقدار fill با مقدار fill_vertical|fill_horizontal در صفت android:gravity و صفت android:layout_gravity برابر هست.

 

24- برای حل مشکل موقعیت متن EditText در اندروید 5.0 کافیه مقدار صفت android:spacing رو 0dp قرار بدید.

 

25- برای نمایش تصاویر بسیار بزرگ(بیشتر از 2000 پیکسل) بهترین گزینه استفاده از WebView هستش.

 

26- رفتارهای متفاوت مقادیر FIT_CENTER و CENTER_INSIDE در صفت android:scaleType:

- اگر تصویر بزرگتر از container باشه، مقدار FIT_CENTER و CENTER_INSIDE رفتار یکسانی خواهند داشت.

- اگر تصویر کوچکتر از container باشه، مقدار FIT_CENTER تصویر رو scale خواهد کرد.

- اگر تصویر کوچکتر از container باشه، مقدار CENTER_INSIDE تصویر رو بدون تغییر در مرکز قرار خواهد داد.

 

27- کاربرد تگ include با ویدجت ViewStub متفاوته! تگ include صرفاً محتوای XML فایل دیگر رو در جایی دیگر ضمیمه می کنه. ولی ویدجت ViewStub کلکسیونی از ویدجت ها می تونه باشه که در زمان نیاز نمایش یا مخفی شون کنه.

 

28- خلاصه اصطلاحاتی درباره سایز و کیفیت صفحه دستگاه اندروید:

Screen size: بیانگر سایز فیزیکی صفحه دستگاه هستش که برای layout و ویدجت ها استفاده میشه. گروه بندی: small, normal, large, extra-large

Screen density / DPI: بیانگر تراکم پیکسل های موجود در صفحه دستگاه هستش که به DPI یا همون Dot Per Inch معروفه. برای مثال دستگاهی با DPI low فقط تعداد اندکی پیکسل در صفحه فیزیکیش وجود داره پس تصاویر هم از کیفیت پایینی برخوردار هستن... گروه بندی: low-dpi, medium-dpi, high-dpi, xhigh-dpi, xxhigh-dpi, x*xxhigh-dpi (برای دسته بندی تصاویر و گرافیک استفاده میشه)

Orientation: بیانگر شیوه نمایش به کاربر هستش. گروه بندی: ایستاده/portrait, خوابیده/landscape

Resolution: بیانگر تعداد کل پیکسل های موجود در صفحه دستگاه هستش. گروه بندی: 320x240, 480x320, 800x480 و...

Inch: بیانگر قطر فیزیکی صفحه هستش که از رادیکال ((طول*2)+(عرض*2)) بدست میاد. گروه بندی: 4.4", 4.7", 5", 10", 15" و...

 

29- نکته جزیی: از واحد sp فقط برای اندازه متون/font و از واحد dp برای اندازه ویدجت ها باید استفاده بشه.

 

30- شیوه صحیح و کوتاه full screen کردن Dialog:

_dialog = new Dialog(this, LayoutParams.MATCH_PARENT);
یا
_dialog.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
یا
_dialog = new Dialog(this, WindowManager.LayoutParams.FLAG_FULLSCREEN);

 

31- در صورتی که پیچیدگی در عناصر صفحه برنامه وجود نداره، بجای RelativeLayout از LinearLayout استفاده کنید... به دلیل اینکه:

1- در LinearLayout عناصر Visibility.GONE و Visibility.VISIBLE شده بدرستی در کنار هم قرار میگیرن، ولی در RelativeLayout خیر.

2- در دستگاه های کوچیک، عناصر موجود در LinearLayout ثابت و منظم می مونن ولی عناصر موجود در RelativeLayout با به هم ریختگی بر روی هم قرار می گیرن.

3- برای تنظیم عناصر در LinearLayout نیازی به تعریف ID برای عناصر نیست، ولی در RelativeLayout نیاز هست تا تک تک عناصر ID گذاری بشن.

4- LinearLayout قابلیت تنظیم weight داره، ولی RelativeLayout نداره.

 

32- رایجترین resolution های دستگاه های اندروید:

 240x320, 320x480, 480x800, 540x960, 640x360, 600x1024, 768x576, 800x400, 960x540, 1024x600, 1280x720, 1280x800, 1366x768, 1440x904, 1600x1200, 1920x1080, 1920x1200, 2048x1536, 2560x1440, 2560x1600

 

33- از انجایی که کلاس های Anonymous سازنده ندارن، بهترین راه استفاده از instance initializers هستش.

 

34- یادتون باشه که تقدم اجرای initializer ها در یک کلاس همیشه بصورت: Static initializer -> Instance initializer -> Constructor هستش.

public class MyClass
{
   // Constructor initializer
   public MyClass()
   {
      // #3
   }

   // Static initializer
   static
   {
      // #1
   }

   // Instance initializer
   {
      // #2
   }
}

 

35- یک دلیل رخداد خطای Performing stop of activity that is not resumed میتونه متغیرهای اکتیویتی باشن که توسط اندروید آزاد/free شده و اکتیویتی شما دیگر به مقدار اصلی/نهایی متغیر دسترسی نداره... لذا مقدار متغیر به پیشفرض/default تغییر کرده. (البته این مسله زمانی رخ میده که سیستم اندروید نیازمند حافظه بیشتری برای برنامه foreground داشته باشه، بنابراین توسط پاکسازی حافظه برنامه های background تامینش میکنه)

 

36- فقط زمانی متدهای setter/getter رو پیاده سازی کنید که در متد پردازش یا محاسباتی صورت میگیره... درغیر این صورت باید از field استفاده کنید که سرعتش هم 3 برابر بیشتر از متد هستش. (مگر اینکه نیاز به تصریح در Interface رو داشته باشید)

 

37- اگر در جاوا 5 به قبل، کلاس Thread رو instantiate کنید و متد start() ش رو صدا نزنید، memory leak انجام دادید!

 

38- دلیل رخداد خطای error: Error retrieving parent for item: No resource found that matches در برنامه Eclipse، نسخه اندروید و theme ای هست که انتخاب کردید... برای نمونه تم Holo در اندروید 2 موجود نیست و در صورت ایجاد پروژه با این مشخصات با این خطا مواجه میشید.

 

39- هرگز اطلاعات حساس و مهم رو بر روی SD Card ذخیره نکنید، مگر بکمک encryption و سطح دسترسی MODE_PRIVATE.

 

40- حتاالمکان سطح دسترسی ContentProvider برنامه رو محدود یا کلاً غیرفعال کنید... برای اینکار کافیه مقدار صفت android:exported در تگ activity رو false قرار بدید:

<activity android:name="mypackage.myapp.myactivity" android:exported="false">
   ...
</activity>

نکته: این کلاس ContentProvider، امکان دسترسی و اشتراک گذاری اطلاعات و دیتای برنامه شمارو برای دیگر برنامه ها فراهم میکنه. بنابراین لازمه که سطح دسترسیش محدود بشه.

توجه: در اندروید نسخه 4.1 به قبل، بطور پیشفرض مقدار این صفت public هستش و در اندروید نسخه 4.2 به بعد مقدار این صفت private یا همون false هستش.

 

مقالات مرتبط

نکات و اصول مهم در برنامه نویسی Java/Android

#2 - نکات و اصول مهم در برنامه نویسی Java/Android

#3 - نکات و اصول مهم در برنامه نویسی Java/Android

#4 - نکات و اصول مهم در برنامه نویسی Java/Android

#6 - نکات و اصول مهم در برنامه نویسی Java/Android

#7 - نکات و اصول مهم در برنامه نویسی Java/Android

۹۶/۰۱/۱۲

نظرات (۷)

اگر شما مایل به دست یابی به یک معامله بزرگ از این قطعه هستید
نوشتن و سپس شما باید این روش را به وبلاگ خود برسد.
پاسخ:
؟
فقط می توانم بگویم که چه چیزی برای کسی آسان است
چه کسی واقعا می داند که آنها در مورد اینترنت صحبت می کنند.

شما مطمئنا درک می کنید که چگونه یک مسئله را به نور تبدیل کنید و آن را مهم بدانید.
مردم بیشتر باید این را بخوانند و این را درک کنند
طرف داستان شما من شگفت زده شدم که شما بیشتر محبوب نیستید زیرا شما مطمئنا هدیه ای دارید.
پاسخ:
هاه؟
۰۲ آذر ۹۶ ، ۱۸:۴۸ std screening near me
سلام، من از خواندن تمام پست شما لذت می برم. من می خواهم یک نظر کمی بنویسم
برای حمایت از شما
۰۱ مهر ۹۶ ، ۱۵:۴۷ علی احمدی
دمتون گرم.
واقعا حرف دلم رو زدید.
چرا آخه باید این مملکت به این روز بیفته !!!
پاسخ:
کدوم حرف؟
به چه روزی؟
بسیاری از آن ها بازی هایی را بازی می کنند که همه آنها می خواهند.
در لیست بالا Terius 'The Dream' Nash، تاج را برای موسیقی کلی می گیرد
توانایی و محتوای منحصر به فرد. بلند کردن روند مد محبوب خود را و تا حدودی بیشتر!
I believe what you wrote made a ton of sense. But, what about this?
suppose you added a little information? I am not saying
your information isn't solid., however what if you added
a title that grabbed a person's attention? I mean #5 - نکات و اصول مهم در برنامه نویسی Java/Android :: یوشا آل ایوب is kinda plain. You might look at
Yahoo's front page and note how they create post headlines
to grab people interested. You might try adding a video or a related picture or two to grab people excited about what you've got to say.
Just my opinion, it could bring your website a little livelier.
My brother recommended I might like this web site. He was
entirely right. This post truly made my
day. You can not imagine simply how much time I
had spent for this info! Thanks!
کاربران بیان میتوانند بدون نیاز به تأیید، نظرات خود را ارسال کنند.
اگر قبلا در بیان ثبت نام کرده اید لطفا ابتدا وارد شوید، در غیر این صورت می توانید ثبت نام کنید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">