جستجو برای:
سبد خرید 0
  • خانه
  • دوره های آموزشی
    • دوره های حضوری و آنلاین
      • دوره جامع برنامه نویسی اندروید
      • دوره جامع برنامه نویسی فلاتر
      • دوره برنامه نویسی React Native
      • دوره آموزشی برنامه نویسی iOS
    • دوره های متخصص و حرفه ای
      • دوره متخصص اندروید (پروژه محور)
      • دوره متخصص فلاتر (پروژه محور)
      • دوره آموزش امنیت در اندروید
      • دوره درآمدزایی دلاری از گوگل پلی در ایران
  • آموزش رایگان
    • دوره رایگان اندروید
    • دوره رایگان فلاتر
  • مشاورهجدید
  • دوره VIP
  • وبلاگ
ورود
گذرواژه خود را فراموش کرده اید؟
عضویت

اطلاعات شخصی شما برای پردازش سفارش شما استفاده می‌شود، و پشتیبانی از تجربه شما در این وبسایت، و برای اهداف دیگری که در سیاست حفظ حریم خصوصی توضیح داده شده است.

ارسال مجدد کد یکبار مصرف (00:60)
  • 02188945907
  • info@amooznegar.com
  • لیست علاقه مندی ها
آکادمی آموزنگار
  • خانه
  • دوره های آموزشی
    • دوره های حضوری و آنلاین
      • دوره جامع برنامه نویسی اندروید
      • دوره جامع برنامه نویسی فلاتر
      • دوره برنامه نویسی React Native
      • دوره آموزشی برنامه نویسی iOS
    • دوره های متخصص و حرفه ای
      • دوره متخصص اندروید (پروژه محور)
      • دوره متخصص فلاتر (پروژه محور)
      • دوره آموزش امنیت در اندروید
      • دوره درآمدزایی دلاری از گوگل پلی در ایران
  • آموزش رایگان
    • دوره رایگان اندروید
    • دوره رایگان فلاتر
  • مشاورهجدید
  • دوره VIP
  • وبلاگ
شروع کنید
آخرین اطلاعیه ها
لطفا برای نمایش اطلاعیه ها وارد شوید
0

وبلاگ

آکادمی آموزنگار > اخبار > برنامه نویسی > اندروید > چرخه حیات lifecycle اکتیویتی در اندروید

چرخه حیات lifecycle اکتیویتی در اندروید

1398-08-01
ارسال شده توسط آموزنگار
اندروید
چرخه حیات lifecycle اکتیویتی در اندروید

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

چرخه حیات اکتیویتی

در اندروید، زمانی که یک اکتیویتی جدید اجرا می‌شود و اکتیویتی قبلی متوقف می‌شود، این تغییرات از طریق متدهای پاسخگویی چرخه حیات اکتیویتی (Activity Lifecycle Callback Methods) مدیریت می‌شوند.

هر اکتیویتی دارای چندین متد پاسخگویی است که بسته به وضعیت آن، توسط سیستم اندروید فراخوانی می‌شوند. این متدها عبارت‌اند از:

  • ایجاد اکتیویتی (Creating Activity): زمانی که اکتیویتی برای اولین بار ایجاد می‌شود.
  • متوقف شدن اکتیویتی (Stopping Activity): هنگامی که اکتیویتی به پس‌زمینه می‌رود و فعالیت آن متوقف می‌شود.
  • از سرگیری اکتیویتی (Resuming Activity): زمانی که اکتیویتی دوباره فعال شده و پردازش آن از سر گرفته می‌شود.
  • از بین رفتن اکتیویتی (Destroying Activity): هنگامی که اکتیویتی به‌طور کامل از حافظه خارج شده و دیگر قابل استفاده نیست.

هر یک از این متدها فرصتی را برای اجرای عملیات خاصی متناسب با وضعیت سیستم فراهم می‌کنند. به عنوان مثال:

  • زمانی که برنامه متوقف می‌شود، اکتیویتی باید منابع سنگین مانند ارتباطات شبکه و پایگاه داده را آزاد کند تا از مصرف بیهوده منابع جلوگیری شود.
  • هنگام از سرگیری فعالیت اکتیویتی، می‌توان منابع موردنیاز را بازیابی کرد و ادامه کارهای قبلی را انجام داد.

مفاهیم چرخه حیات اکتیویتی در اندروید

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

مراحل چرخه حیات اکتیویتی و متدهای کلیدی آن

  1. onCreate() – زمانی که اکتیویتی برای اولین بار ایجاد می‌شود، این متد فراخوانی شده و در آن باید عملیات اولیه مانند ایجاد رابط کاربری، مقداردهی اولیه متغیرها، و تنظیمات مورد نیاز انجام شود.
  2. onStart() – این متد زمانی اجرا می‌شود که اکتیویتی به کاربر نمایش داده می‌شود، اما هنوز تعامل مستقیمی با او ندارد.
  3. onResume() – زمانی که اکتیویتی فعال می‌شود و کاربر مستقیماً با آن تعامل دارد، این متد اجرا شده و عملیات‌هایی مانند پخش ویدیو، دریافت داده زنده یا فعال کردن سنسورها در این مرحله انجام می‌شود.
  4. onPause() – هنگامی که اکتیویتی در حال متوقف شدن است (مثلاً کاربر برنامه را ترک می‌کند یا تماس دریافت می‌شود)، این متد اجرا شده و باید منابعی مانند دوربین، سنسورها و شبکه آزاد شوند.
  5. onStop() – زمانی که اکتیویتی دیگر به کاربر نمایش داده نمی‌شود (مثلاً برنامه به پس‌زمینه می‌رود)، این متد فراخوانی شده و معمولاً در این مرحله باید ذخیره‌سازی داده‌ها و آزاد کردن منابع سنگین انجام شود.
  6. onDestroy() – قبل از اینکه اکتیویتی به‌طور کامل از بین برود، این متد اجرا می‌شود و معمولاً برای پاک‌سازی نهایی و جلوگیری از نشت حافظه استفاده می‌شود.
  7. onRestart() – هنگامی که یک اکتیویتی که متوقف شده بود، مجدداً شروع به کار کند، این متد فراخوانی شده و باعث بازگرداندن منابع و داده‌های ذخیره‌شده می‌شود.

چرا مدیریت صحیح چرخه حیات اکتیویتی مهم است؟

✅ جلوگیری از کرش‌های ناگهانی هنگام دریافت تماس یا تغییر برنامه
✅ بهینه‌سازی مصرف منابع مانند پردازنده، باتری و حافظه
✅ حفظ تجربه کاربری روان و بدون اختلال
✅ جلوگیری از از دست رفتن داده‌های کاربر هنگام تغییر وضعیت اپلیکیشن

چرخه حیات lifecycle اکتیویتی در اندروید
چرخه حیات lifecycle اکتیویتی در اندروید

خوب همون طور که در تصویر بالا دید زمان های مختلفی از یک اکتیویتی نشان داده شده که خانه اندروید مهمترین بخش ها رو خدمت شما معرفی می کنه وقتی کاربر وارد یک اکتیویتی می شود برای اولین بار برنامه اندرویدی ما وارد متد onCreate میشه و کدهای موجود در اون رو Run می کنه خوب حالا اگه کاربر برروی یک دکمه کلیک کنه و وارد یه اکتیویتی جدید بشه اکتیویتی قبلی وارد onPause میشه و اگه کاربر مدت زمان زیادی رو وارد اکتیویتی قبلیه نشه اکتیویتی وارد onStop و بعد مدتی هم وارد onDestroy میشه .

خوب حالا اگه اکتیویتی داخل onPause باشه و کاربر به اکتیویتی برگرده کدهای موجود در onResume اجرا میشه ولی اگه اکتیویتی بسته شده باشه کدهای داخل onCreate از نو شروع میشه .

Lifecycle callbacks:

متد () onCreate :

()onSaveInstanceState متدی است که شما می توانید با آن وضعیت فعلی اکتیویتی تان را ذخیره کنید. سیستم این متد را قبل از اینکه اکتیویتی نابود شود و به شیئ Bundle فرستاده شود، فرا میخواند. Bundle جایی است که شما می توانید اطلاعات مربوط به وضعیت اکتیویتی تان را مانند نام ها با استفاده از متد ()putString، ذخیره کنید. حال اگر سیستم اکتیویتی شما را نابود کند و کاربر به اکتیویتی برگردد، سیستم Bundle را به ()onCreate ارسال میکند و بنابراین با این روششما می توانید وضعیت قبلی اکتیویتی تان را که با استفاده از متد ()onSaveInstanceState ذخیره کرده بودید، بازیابی کنید. اگر اطلاعاتی برای بازیابی موجود نباشد، مقدار Bundleی که به ()onCreate ارسال شده است، تهی (null) خواهد بود.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
TextView mTextView;
  
// some transient state for the activity instance
String mGameState;
  
@Override
public void onCreate(Bundle savedInstanceState) {
    // call the super class onCreate to complete the creation of activity like
    // the view hierarchy
    super.onCreate(savedInstanceState);
  
    // recovering the instance state
    if (savedInstanceState != null) {
        mGameState = savedInstanceState.getString(GAME_STATE_KEY);
    }
  
    // set the user interface layout for this Activity
    // the layout file is defined in the project res/layout/main_activity.xml file
    setContentView(R.layout.main_activity);
  
    // initialize member TextView so we can manipulate it later
    mTextView = (TextView) findViewById(R.id.text_view);
}
  
// This callback is called only when there is a saved instance previously saved using
// onSaveInstanceState(). We restore some state in onCreate() while we can optionally restore
// other state here, possibly usable after onStart() has completed.
// The savedInstanceState Bundle is same as the one used in onCreate().
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
    mTextView.setText(savedInstanceState.getString(TEXT_VIEW_KEY));
}
  
// invoked when the activity may be temporarily destroyed, save the instance state here
@Override
public void onSaveInstanceState(Bundle outState) {
    outState.putString(GAME_STATE_KEY, mGameState);
    outState.putString(TEXT_VIEW_KEY, mTextView.getText());
  
    // call superclass to save any view hierarchy
    super.onSaveInstanceState(outState);
}

متد () onStart :

درست قبل از اینکه اکتیویتی برای کاربر قابل مشاهده باشد، فراخوانی می شود. اگر اکتیویتی به جلو یا پشت دیگر اکتیویتی ها برود، باید متدهای ()onResume و ()onStop بعد از آن اجرا شود.

پشتیبانی از چند زبانه ای و محلی سازی Localization در اندروید
خواندن این مقاله
قدرت گرفته از افزونه نوشته‌های مرتبط هوشمند

متد () onResume :

این متد دقیقاً قبل از اینکه اکتیویتی بخواهد با کاربر تعاملش را آغاز کند، فراخوانی میشود. در این زمان، اکتیویتی در بالاترین نقطه انباره (Stack) قرار دارد و میتواند با کاربر در تعامل باشد. همیشه بعد از آن متد ()onPause باید اجرا شود.

1
2
3
4
5
6
7
8
9
10
@Override
public void onResume() {
    super.onResume();  // Always call the superclass method first
  
  
    // Get the Camera instance as the activity achieves full user focus
    if (mCamera == null) {
        initializeCamera(); // Local method to handle camera init
    }
}

متد () onPause :

این متد زمانی فراخوانی میشود که اکتیویتی دیگری میخواهد اجرا شود (Resume). بطور معمول از این متد برای انجام کارهایی مانند ذخیره اطلاعاتی که هنوز ذخیره نشده اند، توقف انیمیشن و یا سایر کارهایی که CPU را بخودش درگیر کرده است، استفاده میشود. هر کاری که قرار است انجام شود باید بسیار سریع انجام شود زیرا تا زمانیکه وظیفه این متد انجام نشود، اکتیویتی بعدی اجرا نمیشود. متد بعد از این ()onResume است اگر اکتیویتی مجدداً بخواهد به نمایش درآید و یا ()onStop است اگر بخواهد از دید و دسترس کاربر پنهان شود.

1
2
3
4
5
6
7
8
9
10
11
12
@Override
public void onPause() {
    super.onPause();  // Always call the superclass method first
  
  
    // Release the Camera because we don't need it when paused
    // and other activities might need to use it.
    if (mCamera != null) {
        mCamera.release();
        mCamera = null;
    }
}

متد () onStop :

زمانی اجرا میشود که اکتیویتی دیگر در دسترس کاربر نیست. این متد ممکن است بدلیل اینکه دارد نابود میشود، یا بدلیل اینکه اکتیویتی دیگری (چه اکتیویتی ای که قبلاً اجرا شده و الان در استک است و چه اکتیویتی جدید باشد) کارش را از سر گرفته است و دستور اینکار را داده باشد ، اجرا شود. متد بعد از آن ()onRestart است اگر اکتیویتی میخواهد برگردد تا در دسترس کاربر قرار گیرد و یا ()onDestroy است اگر اکتیویتی بخواهد نابود شود.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
@Override
protected void onStop() {
    // call the superclass method first
    super.onStop();
  
    // save the note's current draft, because the activity is stopping
    // and we want to be sure the current note progress isn't lost.
    ContentValues values = new ContentValues();
    values.put(NotePad.Notes.COLUMN_NAME_NOTE, getCurrentNoteText());
    values.put(NotePad.Notes.COLUMN_NAME_TITLE, getCurrentNoteTitle());
  
    // do this update in background on an AsyncQueryHandler or equivalent
    mAsyncQueryHandler.startUpdate (
            mToken,  // int token to correlate calls
            null,    // cookie, not used here
            mUri,    // The URI for the note to update.
            values,  // The map of column names and new values to apply to them.
            null,    // No SELECT criteria are used.
            null     // No WHERE columns are used.
    );
}

متد () onDestroy :

این متد دقیقاً قبل از اینکه اکتیویتی بخواهد نابود شود، اجرا میشود. بعبارت دیگر این متد آخرین فراخوانی است که اکتیویتی دریافت خواهد کرد. این فراخوانی ممکن است به این دلیل باشد که اکتیویتی به پایان انجام وظیفه اش رسیده است (کسی متد ()finish را اجرا کرده است)، یا سیستم بمنظور در اختیار گرفتن فضای بیشتر نیاز دارد تا بعضی از اکتیویتی را نابود کند. متد ()isFinishing وجه تمایز دو سناریوی فوق است.

وضعیت Activity و خروج از حافظه

حرکت بین Activity ها:

شاید در طول اجرای برنامه چندین بار از یک اکتیویتی خارج و یا وارد آن شوید. به عنوان مثال، کاربر ممکن است دکمه برگشت دستگاه را لمس کند یا ممکن است از یک اکتیویتی به اکتیویتی دیگر برود. این بخش مباحثاتی را که شما باید بدانید و برای پیاده سازی Activity های مختلف استفاده کنید را پوشش می دهد. این موضوعات شامل شروع یک Activity از Activity دیگر، صرفه جویی در حالت Activity و بازگرداندن حالت Activity است.

شروع یک Activity

بسته به اینکه آیا Activity شما می خواهد نتیجه را از یک Activity جدید شروع کند و یا ممکن است Activity جدید را با استفاده از روش ()startActivity یا () startActivityForResult شروع کنید. در هر صورت، شما یک شی (Intent) Object را منتقل میکنید.

Intent در لغت به معنای انجام کار است. در اندروید هم تا حدود زیادی همین معنی را می رساند. به اینصورت که به واسطه intent به سیستم عامل اندروید اعلام می کنیم قصد انجام چه کاری را داریم و سیستم عامل چه کاری باید برای ما انجام دهد. به طور کلی اینتنت واسطی است مابین کامپوننت های مختلف (شامل Activity ها، Service ها، Broadcast Receiver ها) درون یک اپلیکیشن و یا مابین چند اپلیکیشن. کاربرد های متعددی برای اینتنت وجود دارد که شاید ساده ترین آن را بتوان انتقال بین دو Activity درون یک اپلیکیشن دانست. در Intent شما می توانید فعالیت و نوع آنرا مشخص کنید. یک Intent همچنین می تواند مقادیر کوچکی از داده ها را که توسط Activity هایی که آغاز شده است، حمل کند.

متد () startActivity :

وقتی که با اپلیکیشن کار می کنید شما اغلب نیاز دارید که به از یک اکتیویتی به اکیتیویتی دیگر بروید یا (launch) کنید.برای مثال کد زیر نشان می دهد که چگونه می توان با استفاده از intent یک اکتیویتی را صدا زد :

1
2
Intent intent = new Intent(this, SignInActivity.class);
startActivity(intent);

برنامه شما ممکن است بخواهد که یک (action) یا یک فعالیت را مانند ارسال ایمیل ی ارسال یک پیام (message) در این صورت میتوان intent را به صورت زیر تغییر داد :

1
2
3
4
5
Intent intent = new Intent(Intent.ACTION_SEND);
  
intent.putExtra(Intent.EXTRA_EMAIL, recipientArray);
  
startActivity(intent);

در بالا از EXTRA_EMAIL استفاده شده است یک آرایه رشته ای از آدرس های ایمیل می باشد که باید بصورت ایمیل فرستاده شود.

نحوه نوشتن رزومه حرفه ای برنامه نویس اندروید
خواندن این مقاله
قدرت گرفته از افزونه نوشته‌های مرتبط هوشمند

متد () startActivityForResult :

لزومی وجود ندارد که شروع activity های دیگر یکطرفه باشد. همچنین می توانید activity دیگری را شروع و نتیجه ای را دریافت کنید. برای دریافت نتیجه به جای startActivity() می توانید از () startActivityForResult, را فراخوانی کنید.

به عنوان مثال، برنامه شما می تواند یک برنامه دوربین را شروع و عکس گرفته شده را به عنوان یک نتیجه برگرداند. یا شما ممکن است برنامه دیگران را برای کاربری برای انتخاب مخاطب شروع کنید و جزئیات مخاطب را به عنوان نتیجه دریافت خواهید کرد.

البته activity ای که پاسخ می دهد باید برای برگرداندن یک نتیجه طراحی شود. هنگامی که این را انجام می دهد، این نتیجه به عنوان یک شی مقصد دیگر ارسال می شود. activity شما آن را در پاسخ onActivityResult() دریافت می کند.

هنگامی که activity کاربر با activity های پس از آن و مقدار بازگشتی به اتمام می رسد، سیستم تابع onActivityResult() activity شما را فراخوانی می کند. این تابع شامل سه آرگومان است:

1 کد درخواستی که شما به () startActivityForResult فرستاده اید .

2 کد نتیجه توسط activity دوم مشخص شده است.اگر عملیات موفقیت آمیز باشد این RESULT_OK و RESULT_CANCELED اگر کاربر خارج شود یا عملیات ناموفق باشد.

3 مقصودی که حامل داده های نتیجه می باشد.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
public class MyActivity extends Activity {
  
     ...
  
  
  
     static final int PICK_CONTACT_REQUEST = 0;
  
  
  
     public boolean onKeyDown(int keyCode, KeyEvent event) {
  
         if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {
  
             // When the user center presses, let them pick a contact.
  
             startActivityForResult(
  
                 new Intent(Intent.ACTION_PICK,
  
                 new Uri("content://contacts")),
  
                 PICK_CONTACT_REQUEST);
  
            return true;
  
         }
  
         return false;
  
     }
  
  
  
     protected void onActivityResult(int requestCode, int resultCode,
  
             Intent data) {
  
         if (requestCode == PICK_CONTACT_REQUEST) {
  
             if (resultCode == RESULT_OK) {
  
                 // A contact was picked.  Here we will just display it
  
                 // to the user.
  
                 startActivity(new Intent(Intent.ACTION_VIEW, data));
  
             }
  
         }
  
     }
  
}

وقتی یک activity توسط activity دیگر شروع می شود، هر دوی آنها داری چرخه حیات مربوط به خود هستند. اولین activity متوقف می شود و در حالت متوقف یا متوقف میگیرد و activity دیگری ایجاد می شود.

منظور از callback lifecycle مواقعی است که وقتی دو اکتیویتی در فعالیت یکسان هستند.یعنس وقتی که اکتیویتی A اکتیویتی B را صدا میزند:

1- متد () OnPause اجرا می شود برای اکتیویتی A.

2- متد onCreate(), onStart(), and onResume() در اکتیویتی B در حال اجرا هستند

3- اگر اکتیویتی A به مدت طولانی نمایش داده نشود متد onStop() اجرا می شود.

ذخیره و بازگرداندن State اکتیویتی

چند سناریو وجود دارد که در آن اکتیویتی شما به دلیل رفتار برنامه از بین می رود، مانند زمانی که کاربر بر روی دکمه Back کلیک کند یا فعالیت خود را با فراخوانی متد () finish تمام میکند. ممکن است وقتی از یک اکتیویتی خارج می شوید اطلاعات مربوز به آن اکتیویتی از بین برود مانند مقادیر ذخیره در متغیر ها یا اگر اکتیویتی در حالت متوقف باشد و در مدت زمان طولانی مورد استفاده قرار نگرفته باشد یا اکتیویتی پیشین به منابع بیشتری نیاز داشته باشد.

وقتی که یک activity متوقف شده است حالت activity باقی می ماند این فرضیه درست است چرا که شی activity هنوزدر حافظه نگهداری شده است وقتی متوفق می شود تمام اطلاعات وضعیت فعلی هنوز از بین نرفته است بنابراین متغیری که کاربر با استفاده از activity اعمال کرده است قابل بازیابی می باشد بنابرای وقتی activity دوباره ادامه پیدا کند این تغییرات هنوز آنجا هستند بنابراین وقتی که سیستم یک activity به منظور پوشش حافظه از بین ببرد شی activity از بین رفته بنابراین سیستم به راحتی نمی تواند حالت قبلی ذخیره شده را ادامه دهد .

() onSaveInstanceState متدی است که شما می توانید با آن وضعیت فعلی اکتیویتی تان را ذخیره کنید. سیستم این متد را قبل از اینکه اکتیویتی نابود شود و به شیئ Bundle فرستاده شود، فرا میخواند. Bundle جایی است که شما می توانید اطلاعات مربوط به وضعیت اکتیویتی تان را مانند نام ها با استفاده از متد () putString، ذخیره کنید. حال اگر سیستم اکتیویتی شما را نابود کند و کاربر به اکتیویتی برگردد، سیستم Bundle را به () onCreate ارسال میکند و بنابراین با این روششما می توانید وضعیت قبلی اکتیویتی تان را که با استفاده از متد () onSaveInstanceState ذخیره کرده بودید، بازیابی کنید. اگر اطلاعاتی برای بازیابی موجود نباشد، مقدار Bundleی که به () onCreate ارسال شده است، تهی (null) خواهد بود.

برای ذخیره اطلاعات مربوط به اکتیویتی خود، شما باید بر روی () SaveInstanceState باید به صورت زیر عمل کنید:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
static final String STATE_SCORE = "playerScore";
static final String STATE_LEVEL = "playerLevel";
...
  
  
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
    // Save the user's current game state
    savedInstanceState.putInt(STATE_SCORE, mCurrentScore);
    savedInstanceState.putInt(STATE_LEVEL, mCurrentLevel);
  
  
    // Always call the superclass so it can save the view hierarchy state
    super.onSaveInstanceState(savedInstanceState);
}

بازگرداندن State اکتیویتی:

وقتی اکتیویتی شما بعد نابود شدن دوباره ساخته و کار خود را شروع می کندشما می توانید تنظیماتی که دخیره کرده اید را بازیابی کنید با استفاده از متد onCreate() و onRestoreInstanceState()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState); // Always call the superclass first
  
  
    // Check whether we're recreating a previously destroyed instance
    if (savedInstanceState != null) {
        // Restore value of members from saved state
        mCurrentScore = savedInstanceState.getInt(STATE_SCORE);
        mCurrentLevel = savedInstanceState.getInt(STATE_LEVEL);
    } else {
        // Probably initialize members with default values for a new instance
    }
    ...
}

شما ممکن است به جای ()onCreate از متد ()onRestoreInstanceState استفاده کنید.متد ()onRestoreInstanceState فقط تنظیمات ذخیره شده را باز می گرداند.

1
2
3
4
5
6
7
8
9
10
11
12
13
public void onRestoreInstanceState(Bundle savedInstanceState) {
 
    // Always call the superclass so it can restore the view hierarchy
 
    super.onRestoreInstanceState(savedInstanceState);
 
    // Restore state members from saved instance
 
    mCurrentScore = savedInstanceState.getInt(STATE_SCORE);
 
    mCurrentLevel = savedInstanceState.getInt(STATE_LEVEL);
 
}
قبلی کتاب آموزشی کاتلین Android Development with Kotlin
بعدی ایجاد پروژه در اندروید استودیو

دیدگاهتان را بنویسید لغو پاسخ

جستجو برای:
دسته‌ها
  • GoLang
  • jetpack compose
  • PHP
  • اپلیکیشن
  • امنیت
  • اندروید
  • اوپن سورس
  • برنامه نویسی
  • برنامه نویسی iOS
  • برنامه نویسی react native
  • پادکست صوتی
  • تکنولوژی
  • جاوا
  • طراح رابط کاربری
  • طراحی رابط کاربری
  • طراحی وب
  • عمومی
  • فریلنسر
  • فلاتر
  • فناوری
  • کاتلین
  • کتاب های آموزشی
  • کسب و کار
  • هوش مصنوعی
  • وردپرس
برچسب‌ها
admob coroutine dagger dagger-hilt jetpack nft rxandroid rxjava spring swift ارز دیجیتال امنیت در اندروید دارت فایربیس فوشیا مصاحبه کاری معماری mvi نقشه راه برنامه نویسی کاتلین گوگل

آکادمی آموزنگار، جایی برای آغاز یک سفر شگفت‌انگیز در دنیای برنامه‌نویسی است. آموزنگار تلاش می‌کند تا هر فردی را از هر سطحی از زندگی و تجربه به دنیای جذاب برنامه‌نویسی وارد کند.

دسترسی سریع
  • درباره ما
  • تماس با ما
  • حریم خصوصی
  • سوالات متداول
نمادها
شبکه های اجتماعی
Facebook Twitter Youtube icon--white Whatsapp

تهران، میدان ولی عصر،خیابان شهیدان سازش،کوچه سوم پلاک 5 طبقه سوم واحد 31

021-88945907

تمامی حقوق برای آکادمی آموزنگار محفوظ می باشد

اشتراک گذاری در شبکه های اجتماعی
ارسال به ایمیل
https://amooznegar.com/?p=1639
  • Afghanistan (+93)
  • Albania (+355)
  • Algeria (+213)
  • American Samoa (+1)
  • Andorra (+376)
  • Angola (+244)
  • Anguilla (+1)
  • Antigua (+1)
  • Argentina (+54)
  • Armenia (+374)
  • Aruba (+297)
  • Australia (+61)
  • Austria (+43)
  • Azerbaijan (+994)
  • Bahrain (+973)
  • Bangladesh (+880)
  • Barbados (+1)
  • Belarus (+375)
  • Belgium (+32)
  • Belize (+501)
  • Benin (+229)
  • Bermuda (+1)
  • Bhutan (+975)
  • Bolivia (+591)
  • Bonaire, Sint Eustatius and Saba (+599)
  • Bosnia and Herzegovina (+387)
  • Botswana (+267)
  • Brazil (+55)
  • British Indian Ocean Territory (+246)
  • British Virgin Islands (+1)
  • Brunei (+673)
  • Bulgaria (+359)
  • Burkina Faso (+226)
  • Burundi (+257)
  • Cambodia (+855)
  • Cameroon (+237)
  • Canada (+1)
  • Cape Verde (+238)
  • Cayman Islands (+1)
  • Central African Republic (+236)
  • Chad (+235)
  • Chile (+56)
  • China (+86)
  • Colombia (+57)
  • Comoros (+269)
  • Cook Islands (+682)
  • Côte d'Ivoire (+225)
  • Costa Rica (+506)
  • Croatia (+385)
  • Cuba (+53)
  • Curaçao (+599)
  • Cyprus (+357)
  • Czech Republic (+420)
  • Democratic Republic of the Congo (+243)
  • Denmark (+45)
  • Djibouti (+253)
  • Dominica (+1)
  • Dominican Republic (+1)
  • Ecuador (+593)
  • Egypt (+20)
  • El Salvador (+503)
  • Equatorial Guinea (+240)
  • Eritrea (+291)
  • Estonia (+372)
  • Ethiopia (+251)
  • Falkland Islands (+500)
  • Faroe Islands (+298)
  • Federated States of Micronesia (+691)
  • Fiji (+679)
  • Finland (+358)
  • France (+33)
  • French Guiana (+594)
  • French Polynesia (+689)
  • Gabon (+241)
  • Georgia (+995)
  • Germany (+49)
  • Ghana (+233)
  • Gibraltar (+350)
  • Greece (+30)
  • Greenland (+299)
  • Grenada (+1)
  • Guadeloupe (+590)
  • Guam (+1)
  • Guatemala (+502)
  • Guernsey (+44)
  • Guinea (+224)
  • Guinea-Bissau (+245)
  • Guyana (+592)
  • Haiti (+509)
  • Honduras (+504)
  • Hong Kong (+852)
  • Hungary (+36)
  • Iceland (+354)
  • India (+91)
  • Indonesia (+62)
  • Iran (+98)
  • Iraq (+964)
  • Ireland (+353)
  • Isle Of Man (+44)
  • Israel (+972)
  • Italy (+39)
  • Jamaica (+1)
  • Japan (+81)
  • Jersey (+44)
  • Jordan (+962)
  • Kazakhstan (+7)
  • Kenya (+254)
  • Kiribati (+686)
  • Kuwait (+965)
  • Kyrgyzstan (+996)
  • Laos (+856)
  • Latvia (+371)
  • Lebanon (+961)
  • Lesotho (+266)
  • Liberia (+231)
  • Libya (+218)
  • Liechtenstein (+423)
  • Lithuania (+370)
  • Luxembourg (+352)
  • Macau (+853)
  • Macedonia (+389)
  • Madagascar (+261)
  • Malawi (+265)
  • Malaysia (+60)
  • Maldives (+960)
  • Mali (+223)
  • Malta (+356)
  • Marshall Islands (+692)
  • Martinique (+596)
  • Mauritania (+222)
  • Mauritius (+230)
  • Mayotte (+262)
  • Mexico (+52)
  • Moldova (+373)
  • Monaco (+377)
  • Mongolia (+976)
  • Montenegro (+382)
  • Montserrat (+1)
  • Morocco (+212)
  • Mozambique (+258)
  • Myanmar (+95)
  • Namibia (+264)
  • Nauru (+674)
  • Nepal (+977)
  • Netherlands (+31)
  • New Caledonia (+687)
  • New Zealand (+64)
  • Nicaragua (+505)
  • Niger (+227)
  • Nigeria (+234)
  • Niue (+683)
  • Norfolk Island (+672)
  • North Korea (+850)
  • Northern Mariana Islands (+1)
  • Norway (+47)
  • Oman (+968)
  • Pakistan (+92)
  • Palau (+680)
  • Palestine (+970)
  • Panama (+507)
  • Papua New Guinea (+675)
  • Paraguay (+595)
  • Peru (+51)
  • Philippines (+63)
  • Poland (+48)
  • Portugal (+351)
  • Puerto Rico (+1)
  • Qatar (+974)
  • Republic of the Congo (+242)
  • Romania (+40)
  • Reunion (+262)
  • Russia (+7)
  • Rwanda (+250)
  • Saint Helena (+290)
  • Saint Kitts and Nevis (+1)
  • Saint Pierre and Miquelon (+508)
  • Saint Vincent and the Grenadines (+1)
  • Samoa (+685)
  • San Marino (+378)
  • Sao Tome and Principe (+239)
  • Saudi Arabia (+966)
  • Senegal (+221)
  • Serbia (+381)
  • Seychelles (+248)
  • Sierra Leone (+232)
  • Singapore (+65)
  • Sint Maarten (+1)
  • Slovakia (+421)
  • Slovenia (+386)
  • Solomon Islands (+677)
  • Somalia (+252)
  • South Africa (+27)
  • South Korea (+82)
  • South Sudan (+211)
  • Spain (+34)
  • Sri Lanka (+94)
  • St. Lucia (+1)
  • Sudan (+249)
  • Suriname (+597)
  • Swaziland (+268)
  • Sweden (+46)
  • Switzerland (+41)
  • Syria (+963)
  • Taiwan (+886)
  • Tajikistan (+992)
  • Tanzania (+255)
  • Thailand (+66)
  • The Bahamas (+1)
  • The Gambia (+220)
  • Timor-Leste (+670)
  • Togo (+228)
  • Tokelau (+690)
  • Tonga (+676)
  • Trinidad and Tobago (+1)
  • Tunisia (+216)
  • Turkey (+90)
  • Turkmenistan (+993)
  • Turks and Caicos Islands (+1)
  • Tuvalu (+688)
  • U.S. Virgin Islands (+1)
  • Uganda (+256)
  • Ukraine (+380)
  • United Arab Emirates (+971)
  • United Kingdom (+44)
  • United States (+1)
  • Uruguay (+598)
  • Uzbekistan (+998)
  • Vanuatu (+678)
  • Venezuela (+58)
  • Vietnam (+84)
  • Wallis and Futuna (+681)
  • Western Sahara (+212)
  • Yemen (+967)
  • Zambia (+260)
  • Zimbabwe (+263)
مرورگر شما از HTML5 پشتیبانی نمی کند.

سوالی دارید؟ از ما بپرسید، کارشناسان ما در اسرع وقت با شما تماس می گیرند.

آموزنگار

آکادمی آموزنگار

  • 021-88945907
  • شنبه تا چهارشنبه از ساعت 8 تا 17
  • info@amooznegar.com
ورود
استفاده از شماره تلفن
استفاده از آدرس ایمیل
آیا هنوز عضو نشده اید؟ ثبت نام کنید
بازیابی رمز عبور
استفاده از شماره تلفن
استفاده از آدرس ایمیل
ثبت نام
استفاده از شماره تلفن
استفاده از ایمیل
قبلا عضو شده اید؟ ورود به سیستم
محافظت توسط