برنامه Git برای کار با repository، پنج پروتکل در اختیار ما گذاشته که هرکدوم مزایا و معایب خودشونو دارن... این پروتکل ها:
1- File (یا همون Local protocol)
2- HTTP (یا همون Dumb protocol)
3- HTTPS (یا همون Smart protocol)
4- SSh
5- Git
هستن. اما از کدوم پروتکل باید استفاده کنیم؟ کدوم پروتکل امنیت بیشتری داره؟ و کدوم پروتکل سرعت بیشتری داره؟
شیوه درست صدا زدن 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
1- طبق گفته Sun، از دستورات System.runFinalizersOnExit() و Runtime.runFinalizersOnExit() استفاده نکنید، اینها منسوخ و Unsafe اعلام شدن:
JAVA-DOC: Because it is inherently unsafe. It may result in finalizers being called on live objects while other threads are concurrently manipulating those objects, resulting in erratic behavior or deadlock. While this problem could be prevented if the class whose objects are being finalized were coded to "defend against" this call, most programmers do not defend against it. They assume that an object is dead at the time that its finalizer is called. Further, the call is not "thread-safe" in the sense that it sets a VM-global flag. This forces every class with a finalizer to defend against the finalization of live objects!
Joshua Bloch: Never call System.runFinalizersOnExit or Runtime.runFinalizersOnExit for any reason: they are among the most dangerous methods in the Java libraries.
2- Handler یا Timer؟ (در شرایط کاربری یکسان)
Handler: براحتی reschedule میشه، هر اینترفیس Runnable ای رو میشه داخلش attach کرد، حافظه کمتری رو مصرف می کنه، بهترین گزینه برای update های UI هستش، از Multi-threading پشتیبانی می کنه، استثناهای پرتاب شده از task ها و thread هارو هندل میکنه، در ساخت Thread میشه Handler اون thread رو هم باهاش طراحی کرد، زمانی که دستگاه به حالت sleep بره کماکان به کارش ادامه میده!
Timer: قابلیت reschedule شدن نداره، فقط یک TimerTask رو میشه داخلش attach کرد، حافظه بیشتری رو اشغال میکنه، بهترین گزینه برای background-task ها هستش، نمی تونه UI رو update کنه، فقط با یک Thread کار میکنه(بقیه task ها باید queue بمونن تا کار اولی تموم بشه)، استثناهای task و thread رو هندل نمی کنه و فقط نابودشون میکنه(دیگر task ها رو هم اجرا نخواهد کرد)، زمانی که دستگاه به حالت sleep بره متوقف میشه.
3- آیا میدونید با فعال کردن خاصیت android:debuggable="true" در فایل AndroidManifest.xml پروسه Proguard غیرفعال میشه؟
4- اگر به استثنا نوع UnknownHostException برخورد کردید و نتونستید این نوع استثنا رو catch کنید، تعجب نکنید. چراکه استثنای UnknownHostException از دسته java.net هستش درحالی که Exception از دسته java.lang!
راه ساده:
try
{
// Codes.
}
catch (final java.net.UnknownHostException exception) // java.net
{
// Handling codes.
}
catch (final java.lang.Exception exception) // java.lang
{
// Handling codes.
}
5- با تغییر color scheme تصاویر به RGB_565 می تونید میزان حافظه اشغالی توسط تصویر رو کاهش بدید:
البته فقط کمی کیفیت تصویر پایین میاد...
BitmapFactory.Options _options = new BitmapFactory.Options(); _options.inPreferredConfig = Config.RGB_565;

<?php
switch (1)
{
case 1:
$var = 'Test';
echo ' in case 1 ';
break;
case 2:
if (isset($var)) echo '($var is set)';
echo ' in case 2 ';
break;
case 3:
echo ' in case 3 ';
break;
}
// Result: in case 1
switch (1)
{
case 1:
{
$var = 'Test';
echo ' in case 1 ';
}
case 2:
if (isset($var)) echo '($var is set)';
echo ' in case 2 ';
break;
case 3:
if (isset($var)) echo '($var is set)';
echo ' in case 3 ';
break;
}
// Result: in case 1 ($var is set) in case 2
switch (1)
{
case 1:
$var = 'Test';
echo ' in case 1 ';
case 2:
if (isset($var)) echo '($var is set)';
echo ' in case 2 ';
break;
case 3:
if (isset($var)) echo '($var is set)';
echo ' in case 3 ';
break;
}
// Result: in case 1 ($var is set) in case 2
switch (1)
{
case 1:
$var = 'Test';
echo ' in case 1 ';
case 2:
{
if (isset($var)) echo '($var is set)';
echo ' in case 2 ';
}
case 3:
if (isset($var)) echo '($var is set)';
echo ' in case 3 ';
break;
}
// Result: in case 1 ($var is set) in case 2 ($var is set) in case 3
در PHP، ظاهراً بودن یا نبودن اون گیومه ها {} هیچ تاثیری در روند اجرای برنامه نداره، بلکه این break هستش که تعیین کنندست... در حالی که در بیشتر زبانها (مثل java, pawn, c++ و...) می تونه حوزه/scope متغیر ها رو داخل هر case تعیین کنه.

توضیح رسمی C99 درباره دستور switch:
البته این یه نکته ریزه که هنوز خیلی از برنامه نویس ها ازش مطلع نیستن
من هم بعد از 1-2 ساعت تحقیق متوجه این موضوع شدم، چراکه مستندات خودشون هم به این نکته اشاره نکردن. (تا جایی که گشتم)
اینها چیزی نیستند جز software bundle، که توسط شرکت ها و گروه های نرم افزاری برای یک هدف جمع آوری شدن. و اون هم فراهم کردن بستری سریع و آسون برای برنامه نویسی.
مفهوم ساده Software bundle یعنی تعدادی نرم افزار مستقل که در یک پکیج گردآوری شدن و توسط یک برنامه واحد مدیریت میشن.
| نرمافزار | شامل | سیستم عامل | ویژگیهای کلیدی |
|---|---|---|---|
| XAMPP | Apache، MySQL، PHP، Perl | چند-پلتفرم | Apache، MySQL، PHP، Perl، SSL، ماژولهای اضافی مثل WordPress، phpMyAdmin |
| WAMP | Apache، MySQL، PHP/Perl/Python | ویندوز | Apache، MySQL، PHP/Perl/Python، نصب آسان، رابط کاربری دوستانه |
| MAMP | Apache، MySQL، PHP | مک | Apache، MySQL، PHP، مشابه XAMPP اما برای مک |
| DAMP | Apache، MySQL، PHP | Debian | Apache، MySQL، PHP، مشابه LAMP اما برای سیستمهای مبتنی بر دبیان |
| UniformServer | Apache، MySQL، PHP | ویندوز | Apache، MySQL، PHP، Perl، سبک، نصب آسان |
| EasyPHP | Apache, MySQL/PostgreSQL, PHP, Ruby, Python, MongoDb | ویندوز | Apache، MySQL، PHP، Perl، رابط کاربری دوستانه، ابزارها و ماژولهای اضافی |
این مقاله شامل آموزش نصب و راه اندازی Java + Android + Eclipse هستش.
که البته منظور از Android, پکیج Android SDK هستش، منظور از Eclipse, برنامه Eclipse IDE هستش و منظور از Java, پکیج Java SDK (همون JDK) هست.
فهرست مندرجات:
حافظه مجازی در کامپیوتر، یک آرایه بزرگ طولانی از بیت هستش و این بیت ها به بلوک هایی به نام بایت تقسیم میشن(هر 8 بیت = 1 بایت) و به هر بایت یک آدرس جهت دسترسی اختصاص داده می شه.
در زبانهای برنامه نویسی، وقتی با داده های غیرفیزیکی(مثل متغیر ها، اشیا، توابع و...) کار می کنید، مقدار و آدرس این داده ها در حافظه مجازی ذخیره میشه. در سطح پایینتر، وقتی متغیر محلی(local variable) یا تابعی تعریف و استفاده می کنید مقادیر و آدرسشون در قسمت Stack حافظه مجازی قرار می گیره. ولی با ساخت شی یا اختصاص حافظه بصورت دستی(Dynamic)، مقدار و آدرسشون در قسمت Heap حافظه مجازی قرار میگیره. و نهایتاً همه اینها در سلول های RAM سخت افزاری کامپیوتر بصورت منظم چیده میشن.
فهرست/مندرجات: