میخوای وارد بازار کار بشی و محصولات خودت رو بفرشی همین الان ثبت نام کن
0

Activity instance state در اندروید

هنگامی تنظیمات دستگاه تغییر می کند، مثلا وضعیت و جهت نمایش تغییر می یابد، activity برای اینکه متناسب با تنظیمات جدید نمایش داده شود، باید مقادیر و منابع متفاوتی را بخواند و از اینرو از نو ساخته می شود (ابتدا متد () onDestroy صدا خورده و بلافاصله متد () onCreate فراخوانی می شود). حال به منظور اینکه سیستم اندروید بتواند activity را با تنظیمات جدید، اما وضعیت قبلی بازگردانی کند، ناچار نمونه ای از آن کلاس را ذخیره می کند. سپس بر اساس داده های ذخیره شده، activity را به حالت قبلی بازمی گرداند. Instance state در واقع داده های موقتی و غیر ماندگار هستند که باید در بازه ی زمانی تغییر بین دو وضعیت نمایش (برای مثال بخاطر تغییر در تنظیمات دستگاه) بین activityها (نمونه ی ذخیره شده از activity و نمونه ی مجدد ایجاد شده) پاس داده شود تا اطلاعات و انتخاب های کاربر (اینک با تنظیمات جدید) به حالت قبل بازگردانی شود. این اپلیکیشن است که وظیفه ی بازگردانی خود به حالت قبلی را دارد

Instance state معمولا جفت های کلید-مقدار هستند که از activity خاتمه یافته، در آبجکت Bundle ذخیره می شوند و جهت بازگردانی وضعیت activity به حالت قبلی (وضعیتی که کاربر در آن اپلیکیشن را ترک کرد) مورد استفاده قرار می گیرند.

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

برای این منظور متد () onSaveInstanceState صدا خورده شده و وضعیت نمونه را در قالب یک آبجکت Bundle در خود ذخیره می کند. آبجکت Bundle می تواند انواع داده ی اولیه، آرایه، String/رشته و Object هایی از جنس Serialisable و Parcelable  را در خود ذخیره کند

داده های ذخیره شده در کلاس ،Bundle در زمان راه اندازی مجدد activity مورد نظر به عنوان پارامتر به متدهای onRestoreInstanceState() و onCreate()  ارسال می شوند

در صورت بازنویسی ( override ) پیاده سازی توابع () onSaveInstanceState و super implementation ، لازم است پیاده سازی کلاس پدر ( onRestoreInstanceState ) را نیز فراخوانی نمایید زیرا view های پیش فرض اندروید داده های خود را به واسطه ی فراخوانی View.onSaveInstanceState EditText  از متد onSaveInstanceState()ذخیره می کنند. برای مثال EditText
محتوای خود را از طریق فراخوانی پیش فرض این متد ذخیره می کند.

با استفاده از دو تابع onCreate() و onRestoreInstanceState() می توانید instance state یک activity را (در صورتی که activity نابود شده و مجددا ساخته شد) بازسازی نمایید.

توجه: برای بازگردانی وضعیت  activity (بازیابیinstance state ) توصیه می کنیم از متد () onRestoreInstanceState استفاده نمایید. این روش تنظیم و راه اندازی اولیه activity را از بازگردانی وضعیت آن به حالت قبلی ( instance state ) جدا می سازد.

اگر کاربر با activity تعامل داشته و سپس دکمه ی Back را فشار دهد یا اینکه متد () finish آن activity صدا خورده شود، activity مورد نظر از پشته ی جاری activity ها حذف شده و recycle می شود. در چنین شرایطی، هیچ instance state ( داده ی ذخیره شده ای از وضعیت activity وجود ندارد که بخواهد بازگردانی شود) برای بازگردانی وجود ندارد، از اینرو متد ()onSaveInstanceState هیچگاه فراخوانی نمی شود.

حال چنانچه کاربر با activity تعامل داشته و بعد دکمه ی Home را فشار دهد، اطلاعات مربوط به وضعیت activity instance / activity می بایست ذخیره شود. در پی این رخداد، متد () onSaveInstanceState فراخوانده می شود و اطلاعات مربوط به وضعیت activity را در خود ذخیره می کند. اکنون اگر کاربر به اپلیکیشن بازگردد یا به عبارتی آن را مجددا راه اندازی کند، سیستم عامل اندروید آخرین activity که هنگام ترک اپلیکیشن فعال و در حال اجرا بود را فراخوانی می کند. در واقع زمانی که activity مجددا راه اندازی می شود، آبجکت Bundle ( حامل داده های ذخیره شده از وضعیت activity ) در اختیار متدهای onCreate() و onRestoreInstanceState() قرار می گیرد 

توجه: در صورتی که کاربر دکمه ی بازگشت را فشار دهد، متد () onSaveInstanceState صدا زده نمی شود. توجه داشته باشید که از این روش نباید به هیچ وجه برای ذخیره ی داده هایی که می بایست ماندگار شوند، استفاده نمایید.

 


امیدواریم آموزش اطلاعات ذخیره شده از آبجکت activity جهت بازگردانی activity به وضعیت قبلی / Activity instance state نیز برای شما مفید واقع شده باشد و ادامه آموزش برنامه نویسی اندروید رو دنبال کنید . برای مطالعه پست‌ها بیشتر ، ما را در مدرسه کدنویسی تلگرام  و یا در تی جوان اینستاگرام دنبال کنید.

نظراتتون رو زیر همین پست با ما به اشتراک بگذارید.

 

ارسال دیدگاه

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

×

سلام کاربر عزیز

هر سوالی دارید در این بخش هستیم تا شما رو راهنمائی کنیم

روی لوگومون کلیک کنید

× چطور میتونم کمکتون کنم؟