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");
کد:
-XX:MaxPermSize=1024m
-Xms512m
-Xmx1024m
7- با استفاده از تگ <include> قادر خواهید بود از طراحی Layout های تکراری اجتناب کنید، و Layout های مشترک/تکراری رو re-use کنید!
8- فراموش نکنید که ViewHolder خلاصه ترین و بهترین گزینه برای هندل کردن عناصر گرافیکی ListView هستش.
9- آیا میدونید مقدار DEBUG در فایل BuildConfig.java تنها زمانی false میشه که برنامه بصورت Signed Application Package کامپایل/export بشه؟
راه ساده برای اطلاع رسانی:
کد:
if (<MY-PACKAGE-NAME>.BuildConfig.DEBUG)
{
Log.wtf(LOG_TAG, "DEBUG-MODE IS ONE!");
}
10- اگر با پیام Waing: Activity not started, its current task has been brought to the front در برنامه Eclipse مواجه شدید، کافیه که پروژه رو Clean و مجدداً Run کنید. (Menu -> Project -> Clean)
11- آیا میدونید در HttpURLConnection باید redirect ها رو بصورت دستی هندل کنید؟
به این صورت که ابتدا کد header ارسال شده از طرف سرور رو توسط getResponseCode بررسی می کنید، اگر با HTTP_MOVED_TEMP یا HTTP_MOVED_PERM یا HTTP_SEE_OTHER برابر بود، توسط getHeaderField محتوای فیلد Location و Set-Cookie رو بازیابی می کنید و مجدداً درخواست دیگه ای با URL جدید بهمراه کوکی ارسال می کنید.
12- آیا می دونید هنگامی که دستگاه با وضعیت low inteal storage space مواجه میشه، اندروید بصورت خودکار cache برنامه ها رو(بدون اطلاع رسانی) پاک میکنه؟
13- (بطور پیشفرض) اگر برنامه ای رو از طریق صفحه Home باز کنید، اکتیویتی Main برنامه بازمیشه، درصورتی که اگر همون برنامه رو از طریق صفحه Recent apps باز کنید، آخرین اکتیویتی که درش حضور داشتید باز میشه. (در اندروید 2 به بعد)
14- نکته جزیی: به دلایل امنیتی، گوگل پیشنهاد کرده که در حین کار با دستور getSharedPreferences، از حالت MODE_PRIVATE استفاده کنید.
چرا؟ چون این حالت تعیین می کنه فقط برنامه ای که اون preference رو ساخته بتونه بهش دسترسی داشته باشه، و نه دیگر برنامه ها.
نکته: این فایل preference بطور پیشفرض در مسیر /data/data/<YOUR-PACKAGE-NAME>/shared_prefs/ دستگاه تون قرار داره.نقل قول: MODE_PRIVATE: File creation mode: the default mode, where the created file can only be accessed by the calling application (or all applications sharing the same user ID).
15- نکته جزیی: SharedPreference ها برای ذخیره تنظیمات برنامه هستند، و نه ذخیره data ی برنامه!
16- SharedPreferences.commit() یا SharedPreferences.apply() ؟
apply: در اندروید 2.3 به بعد تعبیه شده، هیچ retu ای بعد از انجام عملیات نداره(چه failure بشه چه success)، کمی سریعتر از commit هستش، داده ها رو بصورت asynchronously ذخیره میکنه(thread ش رو قفل نمی کنه)، اطلاعات رو سریعاً در RAM ثبت میکنه و بعد روی دیسک ذخیره میکنه و...
commit: در همه نسخ اندروید وجود داره، مقدار retu ش نسبت به failure/success شدن boolean هستش، کمی کندتر از apply هستش، داده ها رو بصورت synchronously ذخیره میکنه(thread ش رو قفل می کنه)، اطلاعات رو مستقیماً برروی دیسک ذخیره میکنه و بهتره بکمک multi-threading طراحی بشه...
17- یک تابع پیشنهادی بهبود یافته برای استفاده از دستورات commit/apply:
کد:
public static final void iCommit(final SharedPreferences.Editor editor)
{
if (Build.VERSION.SDK_INT >= 9) // Gingerbread
{
editor.apply();
}
else
{
new Thread()
{
@Override
public void run()
{
editor.commit();
}
}.start();
} retu;
}
کد:
@Override
protected final void onResume()
{
getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
super.onResume(); // Call at last.
retu;
}@Override
protected final void onPause()
{
getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
super.onPause(); // Call at last.
retu;
}
20- در بیشتر مواقع دلیل رخداد اثتثنای NoClassDefFoundError android.os.AsyncTask باگیه که در Google Play Service وجود داره و بسادگی با روش زیر قابل حله:
کد:
try
{
Class.forName("android.os.AsyncTask"); // Fix AsyncTask bug.
}
catch (final ClassNotFoundException exception)
{}
کد:
برای اندروید های 2 به بعد
<View android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1"/>برای اندروید های 4 به بعد
<Space android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1"/>
کد:
"Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*"
"User-Agent", "Mozilla/5.0 ( compatible ) "
24- در بعضی موارد با استفاده از getText().clear() بجای setText("")، خطای X on inactive InputConnection برطرف خواهد شد.
25- همچنین در بعضی موارد، با بستن Keyboard برنامه قبل از بستن شدن Fragment/Activity، خطای showStatusIcon on inactive InputConnection برطرف خواهد شد:
کد:
@Override
protected void onPause()
{
super.onPause();
View _view = getCurrentFocus(); if (_view != null)
{
final InputMethodManager _imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
if (_imm != null)
{
_imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
_view.clearFocus();
_view.setFocusable(false);
}
}
27- برای اینکه کیبورد نرم افزاری، در حالت landscape تمام صفحه رو پوشش نده، باید:
- خاصیت android:windowSoftInputMode="adjustResize" رو به تگ Activity فایل AndroidManifiest.xml اضافه کنید.
- یا خاصیت android:imeOptions="flagNoExtractUi" رو به تگ EditText فایل layout اضافه کنید.
28- یک تابع پیشنهادی بهبود یافته برای استفاده از ClipboardManager، سازگار با تمام نسخه های اندروید:
کد:
public static final void copyToClipboard(final Context applicationContext, final EditText editText)
{
final ClipboardManager _clipboardManager = (ClipboardManager) applicationContext.getSystemService(Context.CLIPBOARD_SERVICE); if (_clipboardManager != null)
{
if (Build.VERSION.SDK_INT >= 3) // Honeycomb
{
final ClipData _clipData = ClipData.newPlainText(" ", editText.getText().toString());
_clipboardManager.setPrimaryClip(_clipData);
}
else
{
_clipboardManager.setText(editText.getText().toString());
}
}
retu;
}
30- نکاتی درباره متد toString() و valueOf():
- متد valueOf در پشت پرده متده toString رو صدا می زنه.
- از نظر سرعت، متد toString کمی سریعتر از متد valueOf هستش.
- valueOf رو میشه گفت flexible تره و بازه دیتایی بیشتری رو قبول می کنه.
- اگر داده ورودی به این متد ها NULL باشه، متد toString اثتثنای NullPointerException پرتاب میکنه، در صورتی که متد valueOf رشته "null" رو برمیگردونه(null-safe هستش).
- valueOf یک متد static هستش، درصورتی که toString یک متد object.
دکتر مصطفی چمران: می گویند تقوا از تخصص لازمتر است، آنرا می پذیرم، اما می گویم: آنکس که تخصص ندارد و کاری را می پذیرد، بی تقواست.
php مرکز کد های سایت...ما را در سایت php مرکز کد های سایت دنبال میکنید
برچسب: نویسنده: استخدام کار بازدید: 206