یوشا آل ایوب

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

یوشا آل ایوب

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

یوشا آل ایوب

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

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

فقط بخاطر عدم مدیریت و سهل انگاری مسئولین...

 

 

 

 

در اصل فرمانده های سهل انگار آتش نشانی، مدیریت بحرانی های بی مصرف و شهرداری فاسد باعث شهید شدن اینها شدن!

 

و البته اون جوون های ابله بیشعوری که برای گرفتن فیلم/عکس برای فضای مجازیشون راه کمک رسانی رو بند اورده بودن!

۲ نظر ۹۵/۱۰/۳۰
یوشا آل ایوب

در ادامه مقاله قبلیم که شماره سه "نکات و اصول مهم در برنامه نویسی Java/Android" بود، در این مقاله شماره چهار همین موضوع رو ارائه میدم... منتها بیشتر به رفع مشکلات و خطاها می پردازم.

 

1- برای حذف شدن notification هنگام کرش برنامه یا ویدجت، همیشه از یک ID ثابت برای Notification استفاده کنید.

 

2- مقدار صفت android:targetSdkVersion در تگ uses-sdk فایل AndroidManifest.xml، به دستگاه با نسخه مشابه SDK فرمان میده که سیستم compability رو غیرفعال کنه. بنابراین سرعت پردازش برنامه افزایش و کارایی برنامه بهبود پیدا می کنه.

 

3- برای حل مشکل ...sdk.dir is missing. Make sure to generate local.properties using یک فایل با نام local.properties در پوشه اصلی پروژه ایجاد و محتوای زیر رو داخلش کپی کنید:

# This file is automatically generated by Android Tools.
# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
#
# This file must *NOT* be checked into Version Control Systems,
# as it contains information specific to your local configuration.

# location of the SDK. This is only used by Ant
# For customization when using a Version Control System, please read the
# header note.
sdk.dir=<YOUR-ANDROID-SDK-HOME>

بجای عبارت <YOUR-ANDROID-SDK-HOME>، مسیر Android SDK خودتون رو وارد کنید.

 

4- برای حل مشکل minSdk(API x) != deviceSdk(API y) در Android Studio یکی از راه های زیر رو دنبال کنید:

راه اول: داخل گوشی/emulator به مسیر Settings -> منوی Developer options برید و گزینه USB debugging رو فعال کنید.
راه دوم: زمانی که گوشی/emulator رو وصل می کنید، داخل گوشی پنجره Allow USB Debugging باز میشه که حاوی fingerprint هم هست... اون رو ALLOW کنید.
راه سوم: مطمعن شید که حافظه گوشی/emulator پر نشده باشه... اگر شده خالیش کنید.
راه چهارم: داخل گوشی/emulator به مسیر Settings -> منوی Storage برید و از بالا options رو باز کنید، سپس گزینه USB computer connection رو بزنید و نهایتا Media device MTP رو فعال کنید. (اگر درست نشد، Camera device رو فعال کنید)
راه پنجم: نسخه targetSdkVersion و compileSdkVersion رو یکی کنید.
راه ششم: فایل build.gradle رو باز کنید و مقدار عددی minSdkVersion رو به مقدار عددی deviceSdk تغییر بدید.
راه هفتم: داخل Android Studio به منوی Tools -> گزینه Android برید و ADB Integration رو فعال کنید.
راه هشتم: داخل Android Studio به قسمت Build Tools Version برید و نسخه رو به مقدار عددی minSdk یا deviceSdk تغییر بدید.
راه نهم: کلاً از device های سری Preview, N, L استفاده نکنید.

 

5- تفاوت ساختار دایکتوری پروژه در Android Studio و Eclipse:

Android Studio Eclipse
واژه module واژه project
srs/main/assets/ assets/
srs/main/java/ srs/
srs/main/res/ res/
srs/main/libs/ libs/
idea. project.properties
واژه External Libraries واژه Refrenced Libraries
local.properties local.properties
build/ bin/
build/generated/ gen/
Gradle - build.gradle Ant, Maven, Gradle
src/main/jniLibs/ native-libs/

 

6- برای حل مشکل Error: duplicate class: com.x.x.R در Android Studio، کافیه پوشه build رو حذف کنید تا مجدداً تولید بشه. (اگر درست نشد بدنبال فایل R.java بگردید و دستی حذفش کنید)

 

7- آیا میدونید گوگل در اندروید Nougat به قبل برای Davlik VM از subset های پروژه Apache Harmony Development Kit برای Class Library هاش استفاده می کرد و نه JDK؟ و توسعه این پروژه Apache HDK هم در سال 2011 متوقف شده...

 

8- برای حل مشکل No Java virtual machine was found after searching the following locations در برنامه Eclipse یکی از راه های زیر رو دنبال کنید:

"A Java Runtime Environment (JRE) or Java Development Kit (JDK) must be available in order to run Eclipse. No Java virtual machine was found after searching the following locations:
C:\Program Files\eclipse\jre\bin\javaw.exe
javaw.exe in your current PATH"

راه اول: مطمعن بشید که JRE روی سیستم نصب شده باشه.

راه دوم: مطمعن بشید که JRE و Eclipse نصب شده هردو از یک معماری باشن. (هردو x86 یا هردو x64 باشن)

راه سوم: سیستم رو یکبار خاموش و روشن کنید.

راه چهارم(ویندوز): به مسیر نصب شده برنامه Eclipse برید و فایل eclipse.ini رو باز کنید و عبارات زیر رو در خط اولش قرار بدید:

-vm
C:\Program Files\Java\re\bin\javaw.exe

بجای مسیر بالا، مسیر JRE مال خودتون رو قرار بدید.

 

9- Dalvik-VM نه کتابخانست و نه سیستم عامل! بلکه یک ماشین مجازی در اندروید هست که برنامه های نوشته شده برای اندروید رو اجرا میکنه.

درواقع برنامه هایی که توسط جاوا(test.java) نوشته میشن، توسط  javac برای JVM تبدیل به بایت کد(test.class یا test.jar) میشن و بعد به بایت کد مخصوص Dalvik-VM با پسوند DEx و ODEx ترجمه میشن... اما گوگل از اندروید 4.4 به بعد، در کنار Dalvik-VM نرم افزار جدید ART خودش رو (بصورت آزمایشی) رونمایی کرد و سرانجام در اندروید 5.0 بصورت رسمی با Dalvik-VM خداحافظی کرد.

 

10- برای حل مشکل Android requires compiler compliance level 'Y'. Found 'X' instead و Description Resource Path Location Type Incompatible .class files version in required binaries روی پروژه راست کلیک کنید و گزینه Android tools -> Fix project properties رو بزنید.

نکته: اون خطا یعنی باید نسخه Java Compiler برنامه Eclipse با نسخه Project build target اندروید سازگار باشه... برای نمونه، کامپایل پروژه با اندروید 1 و 2 و 3 نیازمند JDK 6(یا همون 1.6) به قبل هستش ولی کامپایل پروژه با اندروید 4 و 5 نیازمند JDK 7(یا همون 1.7) به بعد هستش. 

 

11- نکته جزیی: کتابخانه های جاوا AWT, JavaBeans, Swing جایی در اندروید ندارند!

 

12- اگر درحین اجرای برنامه یا Emulator با خطای ERROR: x86 emulation currently requires hardware acceleration مواجه شدید، کافیه برنامه Intel Hardware Accelerated Execution Manager رو دانلود و در پوشه extras داخل دایرکتوری SDK نصب کنید، و بعد از نصب اون رو اجرا کنید و نهایتا Android Studio/Eclipse رو ببندید و دوباره بازش کنید. (برای دانلود می تونید ازطریق خود برنامه SDK Manager، این سایت یا سایت رسمی Intel اقدام کنید)

نکته: شاید لازم باشه که Virtualization Technology رو در BIOS سیستمتون On کنید.

 

13- اگر در برنامه SDK Manager، کنار پکیج Emulator متن not compatible with windows نوشته شده بود، برنامه SDK Manager رو ببندید و مجدداً از طریق Run as administrator بازش کنید. اگر از این طریق درست نشد، به آدرس http://downloads.puresoftware.org/files/android/API مراجعه و نسخه مورد نظر رو دانلود کنید، بعد از دانلود در پوشه platforms در مسیر نصب شده SDK تون extract ش کنید.

 

14- فراموش نکنید که برای تولید اعداد صحیح random باید از کلاس Random() یا ThreadLocalRandom استفاده کنید و برای تولید اعداد دوبل random از Math.random().

 

15- برای حل مشکل AndroidManifest.xml file missing در برنامه Eclipse یکی از راه های زیر رو دنبال کنید:

راه اول: برنامه Eclipse رو ببندید و مجدداً باز کنید.

راه دوم: به مسیر Menu -> Project -> Properties -> Builders  برید و گزین Android Pre Compiler رو تیک بزنید.

راه سوم: پروژه رو Clean کنید: Menu -> Project ->Clean.

راه چهارم: مطمعن بشید که مسیر /Android SDK/tools و /Android SDK/platform-tools در PATH سیستم وجود دارن.

 

16- تشریح Classpath و Build path و Include path:

Classpath: برای اجرا/execute پروژه طراحی شده، حاوی بایت کد(class.) و برنامه های کامپایل شده پروژه هستش، در مسیر Preferences -> Java -> Build path -> Classpath قرار داره، بخشی از Java هستش و به جاوا اعلام میکنه که فایلهای کامپایل شده پروژه در کجا قرار دارن.

Build path: برای ساخت/compile پروژه طراحی شده، حاوی سورس ها و کتابخانه های پروژه هستش، در مسیر Project -> Properties -> Build path قرار داره، بخشی از workspace ویرایشگر هستش، به ویرایشگر/IDE اعلام میکنه که فایلهای سورس پروژه در کجا قرار دارن...

نکته: Build path فقط مختص ویرایشگر/IDE هستش و در هر ویرایشگری به محل متفاوتی اشاره میکنه.

Include path: برای تفسیر/parse پروژه(مثل C یا PHP) طراحی شده، حاوی فایلهای header، سورس یا inc هستش، کد completion رو اعمال میکنه و کلاً برای پیدا کردن محتوا و منابع استفاده شده در پروژه هستش.

نکته: البته path منابع باید بصورت relative باشه تا توسط Eclipse پردازش بشه. (relative path = file.jpg, absoloute path = c:\windows\file.jpg)

 

17- برای اضافه کردن کتابخانه به Classpath پروژه در Eclipse یکی از راه های زیر رو دنبال کنید:

راه اول: کتابخانه موردنظر رو در پوشه libs پروژه کپی کنید، بعد روی نام فایل کتابخانه راست کلیک کنید و گزینه Build path -> Add to build path رو انتخاب کنید.

راه دوم: فایل کتابخانه مورد نظر رو در پوشه libs پروژه کپی کنید، به مسیر Project -> Properties -> Build path -> Libraries برید، بعد دکمه Add JArs رو بزنید و پوشه libs رو انتخاب و فایل کتابخانه رو باز کنید.

راه سوم: به مسیر Project -> Properties -> Build path -> Libraries برید و دکمه Add External JAr رو بزنید، بعد فایل کتابخانه مورد نظر رو باز کنید.

توجه: با این روش فایل کتابخانه در پوشه پروژه شما کپی نمیشه و فقط بصورت Relative link استفاده میشه.

راه چهارم: به مسیر Window -> Preferences -> Java -> Build path -> Classpath variables برید و دکمه New رو بزنید، بعد در پنجره باز شده عنوان مناسبی در Name بنویسید، حالا دکمه File رو بزنید و کتابخانه مورد نظر رو باز کنید. نهایتاً به مسیر Project -> Properties -> Build path -> Libraries برید، بعد دکمه Add variable رو بزنید و کتابخانه مورد نظر رو انتخاب کنید.

توجه: با این روش فایل کتابخانه در پوشه پروژه شما کپی نمیشه و فقط بصورت Relative link استفاده میشه.

 

18- همیشه در طراحی inner class ها سعی در استفاده از کلاس static کنید... چون کلاسهای غیر static رفرنسی رو به کلاس والد در خودشون ذخیره میکنن. و با این رفرنس می تونن فیلدها و متدهای کلاس والدشون رو صدا بزنن. لذا بکمک کلاس static کاهش مصرف فضا به میزان 4 تا 8 بایت رو خواهید داشت.

 

19- آیا می دونید حداکثر ظرفیت حافظه Heap در اندروید، بیشتر مبتنی بر اندازه resolution و مقدار density صفحه هست؟

برای نمونه، ظرفیت حافظه Heap در گوشی HTC Salsa فقط 20 مگابایته ولی در گوشی HTC Desire بین 32 تا 48 مگابایته! درصورتی که هردو از اندروید 2.3.3 استفاده می کنن، حدوداً 400 تا 600 مگابایت RAM دارن و برای یک شرکت هم هستن. البته فقط درصد کمی از این مقدار مختص برنامه شماست، بقیه صرف خود سیستم عامل، ART/DVM، سرویس ها و غیره میشه.

نکته: resolution، تعداد پیکسل های افقی و عمودی در صفحه رو تعریف می کنه. ولی density فاصله اون پیکسل ها نسبت به یکدیگر رو تعریف میکنه. (که درواقع sharp بودن یا نبودن صفحه رو تعیین میکنه - کلمه اختصاریش هم DPI هستش)

 

20- LeakCanary یک کتابخانه جاوا بسیار عالی برای پیدا کردن memory leak ها در برنامه.

 

21- در صورتی که قادر نیستید پلاگین ای رو در برنامه Eclipse نصب کنید، کافیه فایل zip/jar پلاگین رو extract و پوشه های plugins و features رو در محل نصب Eclipse کپی کنید. بعد Eclipse رو بسته و مجدداً باز کنید.

 

22- نکته جزیی: JavaDoc و AndroidDoc برای نمایش decleration یا tooltips طراحی نشدن و فقط برای باز کردن لینک مستند در مرورگر هستن. مثل http://docs.oracle.com/javase/6/docs/api/javax/swing/AbstractCellEditor.html

 

23- همیشه resource هایی مثل XmlResourceParserFileInputStreamScannerDataOutputStream و... رو بعد از استفاده close(), destroy() یا shutdown() کنید تا memory leak بوجود نیاد.

 

24- فراموش نکنید که System.getProperty("os.name")) نسخه Kernel لینوکس رو برمیگردونه، و نه نسخه اندروید رو.

 

25- اگر در Eclipse برای دیدن Decleration یا Tooltips دستورات جاوا (یا همون API جاوا) با مشکل source not found مواجه هستید، کافیه سورس JRE رو در Eclipse ضمیمه کنید:

راه اول: دکمه Attach source رو بزنید و در پنجره باز شده گزینه External folder رو انتخاب کنید، بعد فایل src.zip رو از محل نصب JDK باز و همه پنجره هارو Ok/Finish کنید.

راه دوم: به مسیر Window -> Preferences -> Java -> Installed JRE برید، بعد JRE مورد نظر رو انتخاب و دکمه Edit رو بزنید، سپس در لیست باز شده همه گزینه ها رو انتخاب و دکمه Source attachment رو بزنید، حالا گزینه External location رو انتخاب و دکمه External file رو بزنید، نهایتاً فایل src.zip رو از محل نصب JDK باز کنید و همه پنجره هارو Ok/Finish کنید.

نکته: برای دانلود سورس JRE، در لینوکس باید پکیج openjdk-7-source یا openjdk-6-source رو دانلود کنید و در Mac پکیج Java for OS X Developer Package رو.

 

25- اگر در برنامه Eclipse برای دیدن Decleration یا Tooltips دستورات اندروید (یا همون API اندروید) با مشکل source not found مواجه هستید، کافیه سورس Android SDK رو در Eclipse ضمیمه کنید:

راه اول: دکمه Attach source رو بزنید و در پنجره باز شده گزینه External folder رو انتخاب کنید، بعد پوشه sources رو از محل نصب Android SDK انتخاب و همه پنجره هارو Ok/Finish کنید.

راه دوم: به مسیر Project -> Properties -> Java build path برید، بعد نسخه اندروید مورد نظر رو انتخاب و باز کنید، سپس در لیست باز شده گزینه android.jar رو انتخاب و باز کنید، بعد گزینه source attachment رو انتخاب و دکمه Edit رو بزنید، حالا در پنجره باز شده گزینه External location رو انتخاب کنید و دکمه External folder رو بزنید، نهایتاً پوشه sources رو از محل نصب Android SDK انتخاب و همه پنجره هارو Ok/Finish کنید.

نکته: برای دانلود سورس Android SDK، برنامه Android SDK Manager رو از مسیر نصب شده یا Window -> Android SDK Manager باز کنید، بعد پکیج Source for Android SDK رو تیک زده و Install کنید. (یا مستقیماً از آدرس http://repository.grepcode.com/java/ext/com/google/android/android یا http://downloads.puresoftware.org/files/android/sources دانلود کنید)

 

26- آیا میدونید:

- سرعت Runtime.getRuntime().runFinalization() از System.runFinalization() کمی بیشتره.

- سرعت Runtime.getRuntime().gc() از System.gc() کمی بیشتره.

- سرعت showDialog(X, null) از showDialog(X) کمی بیشتره.

- سرعت startActivityForResult(X, -1) از startActivity(X)) کمی بیشتره.

- سرعت openXmlResourceParser(0, "X") از openXmlResourceParser("X") کمی بیشتره.

- سرعت parseInt(X, 10) از parseInt(X) کمی بیشتره.

- سرعت startsWith("X", 0) از startsWith("X") کمی بیشتره.

- سرعت hideSoftInputFromWindow(X, 0, null) از hideSoftInputFromWindow(X, 0) کمی بیشتره.

- سرعت showSoftInput(Y, X, null) از showSoftInput(Y, X) کمی بیشتره.

- سرعت getResources().getString() از getString() کمی بیشتره.

و این افزایش سرعت(جزیی) فقط بخاطر overloading هستش.

 

27- نکته جزیی: آیا میدونید گوگل از اندروید Nougat به بعد از OpenJDK استفاده می کنه؟

 

28- برنامه Eclipse نیازمند JRE هستش و نه JDK! چراکه Eclipse بصورت built-in کامپایلر جاوا داره و فقط برای اجرای برنامه به JRE نیاز داره. (لذا JDK فقط صرف برنامه هایی مثل Maven, Ant, Gradle خواهد شد)

 

29- بطور مستقیم و بدون پرسش از کاربر، تنظیمات دستگاه رو دستکاری نکنید... بعلاوه دسترسی به تنظیمات اندروید در هر نسخه ای متفاوت و محدود هست.

 

30- همیشه مطمعن بشید که چرخش(rotation) دستگاه، برنامه شما رو مختل و نمی کنه و برنامه غیرقابل پیش بینی رفتار نمی کنه.

 

31- نکته جزیی: آیا می دونید backward compatibility(سازگاری رو به عقب) در اندروید تضمین نشدست؟

 

32- همیشه از ابزار LogCat استفاده کنید... خطاها، پیامها و رفتارهای برنامه رو بررسی و اونها رو رفع کنید.

 

33- نکته جزیی: آیا میدونید موقعیت keyguard در widgetCategory فقط در اندروید 5 به قبل موجود هستش؟

 

34- برای جلوگیری از recreate/destroy شدن Activity هنگام بیرون کشیدن صفحه کلید سخت افزاری، کافیه صفت android:configChanges="keyboardHidden" رو در تگ activity موردنظر فایل AndroidManifest.xml اضافه کنید.

 

35- برای حل مشکل Cannot reload AVD list: cvc-enumeration-valid: value '280dpi' is not facet-valid with respect to enumeration... در برنامه Android Studio یکی از راه های زیر رو دنبال کنید:

راه اول: مطمعن بشید که USB Debugging در اون Emulator فعال باشه!
راه دوم: برید به مسیر Android\SDK\system-images\android-X\android-wear\armeabi-v7a\ و فایل devices.xml رو با ویرایشگر باز کنید. بعد بدنبال 280dpi بگردید و با 280hdpi جایگزینش کنید. همچنین برید به مسیر Android\SDK\system-images\android-X\android-wear\x86\ و فایل devices.xml رو با ویرایشگر باز کنید. بعد بدنبال 280dpi بگردید و با 280xhdpi جایگزینش کنید. حالا همه برنامه هارو ببندید و دوباره باز کنید و تست کنید. (اگر درست نشد 280xhdpi رو جایگزینشون کنید)
راه سوم: فایل devices.xml رو در مسیر Android\SDK\system-images\android-X\android-wear\armeabi-v7a\ و مسیر Android\SDK\system-images\android-23\android-wear\x86\ حذف کنید.
راه چهارم: برنامه Android SDK رو باز کنید و پکیج های Android Wear ARM و Android Wear Intel x86 Atom رو Uninstall کنید.
راه پنجم: کلاً پوشه android-wear در مسیر \Android\SDK\system-images\android-X رو حذف کنید.

 

36- با اضافه کردن صفت manifestmerger.enabled=true برای Ant در فایل build.xml می تونید manifest برنامه و کتابخانه اندروید ضمیمه شده رو merge کنید.

 

37- توسط کالبک onRestoreInstanceState و onSaveInstanceState می تونید داده های موقتی کاربر رو ذخیره و مجدداً بازیابی کنید.

نکته: کالبد onRestoreInstanceState در هنگام چرخش گوشی یا ذخیره داده توسط onSaveInstanceState فعال میشه.

 

38- نکته جزیی: طبق گفته گوگل، آیکون های notification/status باید سیاه و سفید و بترتیب در سایزهای زیر طراحی بشن:

ldpi = 12x19, mdpi = 16x25, hdpi = 24x38, xhdpi = 32x50, xxhdpi = 48x48, xx*xhdpi 64x100

 

39- اگر در تولید فایل build.xml (اسکریپت Ant) با مشکل مواجه شدید، کافیه در خط فرمان دستور زیر رو بزنید تا مجدداً ایجاد بشه:

android update project -p ./ --subprojects
یا
android update project -p ./

فایل اسکریپت android در مسیر <YOUR-ANDROID-SDK-HOME>/tools قرار داره.

 

40- برای نصب همزمان برنامه و widget بر روی صفحه home باید صفت installLocation="internalOnly" رو در تگ manifest  فایل AndroidManifest.xml اضافه کنید:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
          package="my.package.name" android:versionCode="1" android:versionName="1.0.0" 
          android:installLocation="internalOnly">
۳ نظر ۹۵/۱۰/۲۳
یوشا آل ایوب
  • Version چیست

Version یا همون نسخه، مشخصه ای برای دسته بندی وضعیت محصول منتشر شده و [مختصر] شرحی از تغییرات انجام گرفته هستش.

به این معنی که Version یک محصول، بیانگر حال و روز کنونی و مقدار بهبود یافتگی اون محصول هستش... یا حتی آینده ای که در انتظارشه!

مشخصه Version می تونه بصورت عدد، کلمه و تاریخ باشه; یا حتی هر سه:

Major.Minor.Revision/Patch[.Build] [Architecture] ReleaseState [Date] [Time]

۲ نظر ۹۵/۰۹/۰۳
یوشا آل ایوب

در ادامه مقاله قبلیم که شماره دو "نکات و اصول مهم در برنامه نویسی Java/Android" بود، در این مقاله شماره سه همین موضوع رو ارائه میدم...

 

1- با اضافه کردن خاصیت android:supportsRtl="true" در تگ application فایل AndroidManifiest.xml، مشکل راست به چپ صفحات preferences تون حل خواهد شد. (برای اندروید 4.2 به بعد)

 

2- آیا میدونید هیچ تفاوتی بین fill_parent و match_parent در خاصیت عناصر گرافیکی وجود نداره و هر دو دارای مقدار 1- هستند؟

این مسئله فقط یک تغییر نام جزیی بوده که از API 8 به بعد صورت گرفته و پیشنهاد شده که از match_parent استفاده بشه.

 

3- از اونجایی که SharedPreference ها عملیات read/write برروی دیسک انجام میدن و معمولاً هم در متد OnCreate() یا OnResume() فراخوانی و load می شن، پس بهتره در thread غیر از UI اعمال بشن، تا برنامه رو دچار وقفه نکنن.

همچنین لازم نیست نگران تعدد عملیات باشید، چراکه SharedPreference یک شی Singleton هست و فقط یکبار بارگذاری میشه.

 

4- در بیشتر مواقع با استفاده از عبارات زیر در تعاریف HttpURLConnection تون، خطای recvfrom failed: ECONNRESET (Connection reset by peer) برطرف خواهد شد:

System.setProperty("http.keepAlive", "false");
myHttpUrlConnection.setRequestProperty("connection", "close");

 

5- برای حل مشکل GC overhead limit exceeded در برنامه Eclipse کافیه ظرفیت حافظه Heap این برنامه رو در فایل eclipse.ini تغییر بدید:

-XX:MaxPermSize=1024m
-Xms512m
-Xmx1024m

۱ نظر ۹۵/۰۸/۰۶
یوشا آل ایوب

Virtual File System یا سیستم فایل مجازی

 

Virtual File System(مخفف VFS) یک ساب سیستم مهم در Kernel لینوکس هست که لایه بین filesystem و برنامه های user-space رو تشکیل میده. درواقع همه filesystem ها، با تکیه بر VFS می تونن شناسایی بشن و تبادل اطلاعات کنن. همین مسئله، برنامه های user-space رو قادر کرده که توسط دستورات موجود در VFS برای خواندن و نوشتن در filesystem های گوناگون اقدام کنن:

 

نکته: در اینجا منظور از لایه، همون Abstraction layer و منظور از دستورات، همون System call/SysCall هستش.

نکته 2: البته به برکت wrap های Gnu C Library، کمتر پیش میاد که برنامه user-space نیاز به استفاده از System call داشته باشه.

۱ نظر ۹۵/۰۷/۲۱
یوشا آل ایوب

تغییر رفتار و امکانات keyboard اندروید در مقابل مقدار صفت inputype عنصر EditText: (تست شده روی اندروید 4.4.3 و 2.3.3)

<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 بدرستی رفتار خواهد کرد، درغیر اینصورت در همه موارد خاموش خواهد ماند.

 

۴ نظر ۹۵/۰۶/۲۳
یوشا آل ایوب

شیوه درست صدا زدن Superclass ها در Activity اندروید:

// Called after onCreate has finished, use to restore UI state
@Override
public void onRestoreInstanceState(Bundle savedInstanceState)
{
    super.onRestoreInstanceState(savedInstanceState); // Always call the superclass method at FIRST.

    // Restore UI state from the savedInstanceState.
    // This bundle has also been passed to onCreate.
    // Will only be called if the Activity has been
    // killed by the system since it was last visible.
}

// Called before subsequent visible lifetimes for an activity process.
@Override
public void onRestart()
{
    super.onRestart(); // Always call the superclass method at FIRST.

    // Load changes knowing that the Activity has already
    // been visible within this process.
}

// Called at the start of the visible lifetime.
@Override
public void onStart()
{
    super.onStart(); // Always call the superclass method at FIRST.

    // Apply any required UI change now that the Activity is visible.
}

// Called at the start of the active lifetime.
@Override
public void onResume()
{
    // Resume any paused UI updates, threads, or processes required
    // by the Activity but suspended when it was inactive.

    super.onResume(); // Always call the superclass method at LAST.
}

// Called to save UI state changes at the end of the active lifecycle.
@Override
public void onSaveInstanceState(Bundle savedInstanceState)
{
    // Save UI state changes to the savedInstanceState.
    // This bundle will be passed to onCreate and
    // onRestoreInstanceState if the process is
    // killed and restarted by the run time.
    super.onSaveInstanceState(savedInstanceState); // Always call the superclass method at LAST.
}

// Called at the end of the active lifetime.
@Override
public void onPause()
{
    // Suspend UI updates, threads, or CPU intensive processes
    // that don't need to be updated when the Activity isn't
    // the active foreground Activity.
    super.onPause(); // Always call the superclass method at LAST.
}

// Called at the end of the visible lifetime.
@Override
public void onStop()
{
    super.onStop(); // Always call the superclass method at FIRST.

    // Suspend remaining UI updates, threads, or processing
    // that aren't required when the Activity isn't visible.
    // Persist all edits or state changes
    // as after this call the process is likely to be killed.
}

// Sometimes called at the end of the full lifetime.
@Override
public void onDestroy()
{
    // Clean up any resources including ending threads,
    // closing database connections etc.

    super.onDestroy(); // Always call the superclass method at LAST.
}

 

خلاصه مطب: در متد های onRestoreInstanceState، onStop, onRestart, onStart، ابتدا باید Superclass صدا زده بشه و بعد کدهای شما قرار بگیره. اما در متدهای onDestroy, onPause, onSaveInstanceState, onResume ابتدا باید کدهای شما قرار بگیره و بعد متد Superclass صدا زده بشه.

عدم رعایت این اولویت ها گاهی باعث کندی، crash کردن، memory leak، ناهماهنگی در UI، باگهای DataSaving و امثالش میشه... پس حتماً رعایت کنید.

 

(شاید درصد کمی از برنامه ها باشند که از این قائده پیروی نمی کنند، اما اون هم با آگاهی کامل از محتوا و مکانیسم Superclass ها.)

 

منبع: پروفسور Andrew T. Campbell (و گوگل)

http://www.cs.dartmouth.edu/~campbell/cs65/lecture05/lecture05.html

۰ نظر ۹۵/۰۶/۰۷
یوشا آل ایوب

نقل قول از صفحه Shabe 23:

۰ نظر ۹۵/۰۵/۰۲
یوشا آل ایوب

نسخه 14.2 لینوکس Slackware هم روانه بازار شد!

۰ نظر ۹۵/۰۴/۱۳
یوشا آل ایوب

شاید شما هم شنیده باشید:

قضیه نجس بودن سگ دروغی بیش نیست و از حمله اعراب به ایران وارد اسلام شده! منبع: کتاب مانتره / میثرا اشوان

این ادعای بی اساس بتازگی توسط عده ای(ندانسته) در فضای مجازی پراکنده و با ارجاع به کتاب مانتره / میثرا اشوان مطرح شده... درصورتیکه اصلاً کتابی بنام مانتره / میثرا اشوان وجود نداره و تنها یک وصیت نامه شخصیست! که هیچ سندیتی هم نداره

۳ نظر ۹۵/۰۴/۰۱
یوشا آل ایوب