سلام.
هنگامی که ما بر روی دکمه Back اشاره می کنیم، اگر روش onBackPressed (
کلید شماره 234) در Activity نوشته نشده باشد، عملیات پیش فرض این است که Activity فعلی، destroy (کاملا بسته) شود و اگر قبل از آن، Activity دیگری بوده، به آن برگردیم، یا اگر نبوده، کاملا از برنامه اندروید خارج شویم. بنابراین شما اگر روش onBackPressed را ننوشته اید، با زدن دکمه Back گوشی، آن Activity دوم، destroy می شود و طبیعتا بار دوم که به آن برگردید، از نو اجرا خواهد شد.
اکنون فرض کنید قصد داریم که اطلاعات Activity را حفظ کنیم. یک راه حل، استفاده از SharedPreferences (
کلید شماره 248) می باشد (این کلید را ذکر کردم چون در آن، تنظیمات را گرافیکی تغییر می دهیم، ولی برای ذخیره اطلاعات، کلیدهای دیگری نیز در این مورد وجود دارد)، که البته این ویژگی را دارد که حتی اگر از برنامه اندروید خارج شویم و دوباره برنامه اندروید را اجرا کنیم، باز هم همان آخرین اطلاعات نمایش داده می شود و هیچگاه به تنظیمات اولیه برنمی گردیم (مگر اینکه خود برنامه نویس، یک سری کد برای reset کردن تنظیمات (به صورت دستی یا خودکار) بنویسد).
اما در موارد زیادی، تنظیمات یا تغییرات مد نظرمان، با روش بالا امکان پذیر نیست و همچنین تنها برایمان مهم است که در همان یک بار اجرای برنامه اندروید، اطلاعات آن Activity حفظ شود و در دفعات بعدی اجرای برنامه اندروید، Activity از نو اجرا گردد. در این موارد، باید از همان روش onBackPressed (
کلید شماره 234) استفاده کنیم (آن را در Activity دوم می نویسیم) و در آن کدی بنویسیم که کاربر به Activity اول هدایت شود. یعنی به جای destroy شدن Activity دوم (که بعد از آن، به Activity اول برمی گشتیم)، این بار با Intent به Activity اول می رویم (روش Intent را در onBackPressed می نویسیم). بنابراین در این حالت، Activity دوم در پس زمینه است و به حالت Resume یا Stop رفته است و اگر از Activity اول دوباره به آن وارد شویم، همان اطلاعات را خواهیم داشت (از نو اجرا نمی شود).
فقط یک نکته مهم وجود دارد و آن این است که اگر از روش Intent به صورت معمولی استفاده کنیم، یک صفحه جدید از آن Activity نمایش داده می شود (یعنی در لیست Activity های موجود در پس زمینه، دو یا چند بار وجود خواهد داشت)، برای جلوگیری از این مشکل، باید روش Intent را به شکل زیر به کار ببریم (به Flag تعیین شده دقت کنید) :
کد پیاچپی:
Intent intent = new Intent(Activity_2.this, Activity_1.class);
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(intent);
این Flag باعث می شود که به جای یک اجرای جدید از Activity ، آن را از پس زمینه فراخوانی کنیم (آن اجرایی از آن که در پس زمینه است، دوباره نمایش داده می شود). بنابراین برای رفتن از Activity دوم به Activity اول ( و همچنین برعکس)، Flag بالا را فراموش نکنید (که با اجرای جدید از Activity ها مواجه نشوید).
با توجه به نکاتی که شرح داده شد، توصیه می کنم کلید زیر را بخوانید :
کلید شماره 2802