چرخه حیات یا LifeCycle برای هر موجود زنده ای صادق است مثلا چرخه حیات برای انسان ها میتواند به این صورت باشد:
- تولد
- نوزادی
- کودکی
- نوجوانی
- جوانی
- میانسالی
- کهنسالی
- مرگ
هر کدام از این دوران ها ، روحیات ، احساسات ، دغدغه ها و نیازهای مخصوص به خودش را دارد که برای یک زندگی سالم باید به آنها توجه کرد.
این موضوع در برنامه نویسی اندروید هم مهم هست وقتی یک اکتیویتی یا یک فرگمنت اجرا می شود سلسله وضعیت های متفاوتی رو پشت سر میگذارد و برای اینکه بتوانید برنامه ای بهینه ، روان ، اصولی تولید کنید لازم است که از Lifecycle اکتیویتی و فرگمنت آگاهی داشته باشید.
پیاده سازی مناسب LifeCycle باعث می شود :
-- از وقوع خطاها و Crash شدن برنامه جلوگیری شود.
-- از اشغال شدن منابع سیستمی جلوگیری شود.
-- وقتی کاربر از برنامه خارج و مجددا به آن باز میگردد وضعیت و داده های کاربر حفظ شود.
وقتی یک اکتیویتی اجرا می شود به ترتیب :
on Create
on Start
on Resume
اجرا می شود
تا اینجا اکتیویتی به نمایش در آمده و کاربر میتواند با آن در تعامل باشد.
وقتی اکتیویتی در حالت on Resume قرار دارد چند حالت ممکن است پیش بیاید:
- - کاربر از اکتیویتی مبدا به اکتیویتی مقصد کوچ کند در این حالت رویداد on Pause برای اکتیویتی مبدا اجرا می شود و رویداد های on Create و on Pause و on Resume برای اکتیویتی مقصد و در نهایت رویداد on Stop برای اکتیویتی مبدا اجرا می شود.
- - کاربر با فشردن دکمه Home برنامه را به Background منتقل کند در این حالت متدهای on Pause و on Stop اجرا می شود.
حال اگر کاربر مجددا به برنامه بازگردد متد های on Restart و on Start و on Resume اجرا می شود.
باید به یاد داشت سیستم عامل در صورت نیاز به منابع سیستمی اقدام به فراخوانی متد on Destroy برنامه هایی میکند که به مدت طولانی در Background مانده باشد که در این حالت اگر مجدد برنامه را باز کنید به ترتیب متدهای on Create و on Strart و on Resume اجرا میشود.
- - کاربر با زدن دکمه Back از برنامه کاملا خارج شود در این حالت متد های on Pause و on Stop و on Destroy اجرا می شود.
اگر با زدن دکمه Back از اکتیویتی B به اکتیویتی A بازگردد برای اکتیویتی B رویداد on Pause اجرا می شود و برای اکتیوتیتی A رویدادهای on Restart و on Start و on Resume و در نهایت برای اکتیویتی A رویداد on Stop و on Destroy اجرا می شود.
- - وقتی کاربر گوشی را میچرخاند چرخه حیات اکتیویتی به این صورت اجرا می شود :
on Pause
on Stop
on Destroy
on Create
on Start
on Resume
?رویداد on Create
اولین رویدادی است که اتفاق میافتد و در آن کارهایی مثل:
- انتصاب فایل XML مربوط به اکتیویتی.
- معرفی View ها (findViewById).
- ایجاد و مقداردهی اولیه Global Object ها.
و ...
را انجام میدهیم.
در واقع می توان گفت هر کاری که در طول حیات یک اکتیویتی فقط یکبار نیاز است که انجام شود در این رویداد قرار میگیرد.
مثل bind کردن داده ها به لیست ، دریافت داده ها از اکتیویتی قبلی و ...
انجام عملیات سنگین در این بخش توصیه نمی شود چرا که در کندی نمایش اکتیویتی موثر می باشد.
? رویداد on Start
این رویداد بعد از onCreate اجرا می شود و اکتیویتی آماده هست تا به کاربر نمایش داده شود. این تابع نیز سریع اجرا می شود و نباید عملیات های سنگین را در این بخش اجرا کرد.
در این بخش می توان عملیاتی نظیر موارد زیر را انجام داد :
- - فرض کنید وقتی وارد اکتیویتی می شوید قرار است آهنگی پخش شود در این حالت میتوان در دستور play رو فراخوانی کرد.
- - میتوان register شدن broadCastReciever را نیز در همین رویداد قرار داد.
و ...
? رویداد on Resume
این رویداد هنگامی اتفاق می افتد که اکتیویتی به کاربر نمایش داده می شود و برنامه در Foreground قرار دارد و کاربر می تواند با برنامه در تعامل باشد.
عملیاتی هایی شبیه به زنگ خودن گوشی ، خاموش شدن صفحه گوشی ، جا به جا شدن به اکتیویتی دیگر و ... باعث می شود این رویداد به پایان برسد و برنامه وارد رویداد های On Pause و On Stop شود.
تعاملات کاربر با برنامه مثل کلیک کردن ها ، ارتباط با سرور ، ارتباط با دیتابیس و ... در این رویداد انجام میشود.
به عنوان مثال در تایم لاین اینستاگرام درخواستی که به سرور برای گرفتن لیست پستهای تایم لاین داده می شود در رویداد فراخوانی می شود
حال اگر گوشی شما زنگ بخورد یا صفحه گوشیتان خاموش شود ، بعد از اینکه تماستان تمام شود یا صفحه گوشیتان روشن شود ، متد On Resume دوباره اجرا می شود و مجدد درخواست به سرور ارسال می شود و لیست پست ها به روز می شود و شما به ابتدای لیست منتقل می شوید.
? رویداد on Pause
وقتی برنامه در حالت On Resume قرار دارد اگر گوشی شما زنگ بخورد یا صفحه گوشی خاموش شود ، یا کاربر از اکتیویتی فعلی به اکتیویتی دیگری برود ، ابتدا رویداد On Pause و سپس رویداد On Stop اجرا می شود.
در این رویداد عملیات های سنگین مثل ارتباط با سرور ، ارتباط با دیتابیس و ... نباید انجام شود.
وقتی برنامه ای در حالت MultiWindow قرار میگیرد برنامه ای که در حالت فعال نیست در رویداد On Pause قرار میگیرد. ( در مبحث دیگری به MultiWindow نیز میپردازیم).
در این رویداد می توانید عملیاتی نظیر pause کردن موزیک پلیر و... را انجام داد.
? رویداد on Stop
این رویداد پس از on Pause اجرا می شود در این رویداد متوقف کردن انیمیشن ها ، آزاد کردن هر نوع سرویس ، منابع و قطع کردن کانکشن به دیتابیس یا سرور در این رویداد انجام می شود.
? رویداد on Destroy
این رویداد وقتی اجرا می شود که اکتیویتی آماده destroy شدن میشود .
وقتی دستور finish() برای اکتیویتی اجرا می شود قبل از آن رویداد on Destroy اجرا می شود .
همچنین موقع چرخش صفحه نیز این رویداد اجرا می شود