Tasks and Back Stack

هر برنامه از چندین activity تشکیل شده است.هر activity  را می توان توسط خود برنامه و یا سایر برنامه ها فراخوانی کرد.برای مثال برای ارسال ایمیل می توان به وسیله intent درخواست باز شدن یک activity  را به سایر برنامه ها ارسال کرد.

در سیستم اندروید مفهومی به اسم Task وجود دارد که در آن تعدادی activity وجود دارد.این activityها در یک stack نگهداری می شوند.زمانیکه کاربر یک برنامه را باز می کند ،سیستم اندروید در صورتیکه Task مربوطه وجود داشته باشد آن را دوباره اجرا می کند و در صورتیکه Taskی برای برنامه وجود نداشته باشد ،یک Task جدید خواهد ساخت.

توجه به این نکته ضروری است که به هیچ عنوان activity ها در stack خارج از push و pop  کردن arrange مجدد نمی شوند.

در عکس پایین شما فرایند افزودن و پاک شدن یک activity را در stack مشاهده می کنید:

diagram_backstack.png

زمانی که کاربر با زدن دکمه back تمام activity را از stack پاک کند و به صفحه خانه(Home screen)برگردد Task از بین خواهد رفت.

فرض کنید می خواهید دو برنامه a و b را اجرا می کنید.در این حالت با اجرا کردن برنامه a یک تسک برای آن ساخته می شود و در صورتیکه با استفاده از دکمه home  به صفحه خانه(Home screen) برگردید تسک a  در background قرار خواهد گرفت و تمام activityهای آن به وضعیت stopped تغییر وضعیت خواهند داد. حال اگر برنامه b را اجرا کنید یک تسک جدید ایجاد خواهد شد و این تسک در foreground قرار خواهد گرفت.

سیستم اندروید توانایی نگهداری تعداد زیادی task را در background دارد ولی توجه به این نکته لازم است که در صورتیکه سیستم اندروید نیاز داشته باشد، برای بازیابی فضای ram تعدادی از آن ها را ز بین ببرد.

نکته :امکان این وجود دارد که از یک activity  چندین instance در stack وجود داشته باشد.

diagram_multitasking

 

نکاتی در رابطه با lifecycle یک Activity

زمانی که به هر عنوان صفحه  از حالت عمودی به افقی و یا برعکس تغییر جهت دهد در این حالت وضعیت activity به وضعیت destroyed  تغییر خواهد کرد و دوباره ساخته خواهد شد.نکته قابل توجه این است که شما باید متد onSaveInstanceState() را پیاده سازی کنید و اطلاعاتی که نیاز دارید (به غیر از اطلاعاتی خود سیستم اندروید به طور اتوماتیک ذخیره و بازبابی می کند) را در شی bundle ذخیره کنید.

زمانی که کاربر دکمه back دستگاه را فشار می دهد در این حالت activity به destroyed رفته و instance آن از بین خواهد رفت.توجه داشته باشید که دیگر onSaveInstanceState فراخوانی نخواهد شد.زیرا در این حالت سیستم فرض می کند که شما دیگر قصد بازگشت به activity را ندارید.به هر حال با استفاده از onBackPressed() می توانید قبل از اینکه activity از بین برود از کاربر کانفرم دریافت کنید.