بررسی Task و Back Stack در اندروید (بخش اول)

جمعه ۰۵ مرداد ۹۷ توسط امیرحسین حیدری

اکتیویتی ها در اندروید ساختارهای منطقی هستند که کاربر را در صفحه های مختلف هدایت می نمایند. دانستن ارتباط هر اکتیوتی با سایر اکتیویتی ها برای داشتن یک تجربه کاربری خوب ضروری بوده و این ارتباط باید با تمرکز بر مبنای دید کاربر طراحی گردد. به این منظور، سیستم اندروید جریان کاری و عقب و جلو رفتن کاربر بین اکتیویتی ها را به خوبی در مفهموم Task در نظر گرفته و کنترل می نماید. یک  Task، اکتیویتی ها را با استفاده از یک پشته بنام  Back Stack نگهداری مینماید. ساختار  Stack   بصورت LIFO است و اکتیویتی ها را به ترتیب آغاز شدن آنها نگهداری نموده و هیچگاه این ترتیب را بهم نمیریزد.  کنترل و هدایت Back Stack توسط دکمه Back انجام میشود.

 رفتارهای پیش فرض Stack  و Back Stack   به اینصورت است که:

  • اندروید Task جدیدی را ایجاد کرده و اکتیویتی اصلی (لانچر) را بعنوان اولین عضو در Back Stack قرار میدهد.
  • وقتی اکتیویتی جاری یک اکتیویتی دیگر را شروع میکند، اکتیویتی جدید در بالای پشته و در حالت focued قرار میگیرد.
  • موقعیت اکتیوییتی قبلی به پایین اکتیویتی جاری رفته و متوقف میشود. سیستم حالت این اکتیویتی را (مانند نوشته های درون فرمها یا محلی که صفحه تا آنجا اسکرول شده) را در خود نگهداری میکند.
  • اکتیویتی های بعدی نیز به همین ترتیب در Back Stack جمع میشوند.
  • وقتی دکمه Back فشرده میشود، اکتیویتی جاری از پشته کنار گذاشته شده و اکتیویتی قبلی Resume میشود.
  • دکمه Back به همین ترتیب کنار گذاشتن اکتیویتیهای جاری و بازیابی اکتیویتی های قبلی را ادامه میدهد تا به آخرین اکتیویتی موجود در پشته که همان لانچر اکتیویتی است میرسد و فشردن Back در این حالت باعث خالی شدن پشته و از بین رفتن  Task و خارج شدن از اپلیکیشن خواهد شد.
  • دستیابی به اکتیویتی های اپلیکیشن های متفاوت با استفاده از intent مربوطه است.

ویژگی های مهم Task

با ایجاد Task جدید  و یا با زدن دکمه  Task ،Home فعلی به بکگراند میرود.

با فشردن آیکون برنامه یا ااجرا از فعالیتهای اخیر  Task قبلی مجداد به حالت قبلی باز میگردد.

زمانی که چندین Task  در پس زمینه فعال هستند و یا زمانی که کاربر برای مدت طولانی Task را رها میکند، سیستم برای بازیابی حافظه تمامی Tasks های اکتیویتی ها را بغیر از اکتویتی ریشه پاک میکند و زمانی که کاربر مجداد به این  Task باز میگردد، فقط اکتیویتی ریشه بازیابی میگردد.

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

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

 برای رسیدن به این منظور میتوانیم در مانیفست، مشخصه android:launchMode را در تگ اکتیویتی مورد نظر اعمال کنیم و یا از Flag در اینتنت مورد نظر برای آغاز اکتیویتی استفاده نماییم.  

 

منبع:  medium.com


کلیدواژه: Task Back stack Android

منابع:

دیدگاه ها:
arka
۱ سال قبل
reply
سلام.
لطفا این موضوع و بقیه موضوع های مشابه که مربوط به مفاهیم هستند رو با سرعت بیشتری ارایه بدید و مورد بعدی هم اینکه در مورد انواع فلاگ‌های اینتنت مثل newTask, clearTask و... هم توضیحاتی (با جزئیات) ارائه بفرمایید.
ممنون
احمد
۱ سال قبل
reply
سلام
من درست متوجه نشدم ک هر برنامه تنها یک task داره یا ...؟
امیرحسین حیدری
۱ سال قبل در پاسخ به احمد
reply
سلام
بصورت پیش فرض تمام اکتیویتی های یک اپ درون یک Task قرار میگیرند ولی میتوان Task جدیدی برای اکتیویتی ایجاد کرد.
ارسال دیدگاه:
برای ارسال دیگاه باید به سیستم وارد شوید و یا ثبت نام کنید. ثبت نام چند لحظه بیشتر زمان شما را نمیگیرد.