وبلاگ - مطالب آموزشی

0
710
آشنایی با Android Activity Lifecycle (بخش دوم)

آشنایی با Android Activity Lifecycle (بخش دوم)

در مطلب قبلی با انواع متدهای Lifecycle آشنا شدید و در ادامه با ساختن انواع اکتیوتی ها آشنا خواهید شد، با ما همراه باشید.

 

ایجاد اکتیویتی

اکثر تعاملات کاربر، وضعیت یک اکتیویتی فعال را تغییر میدهند و اپلیکیشن چندین بار بین اکتیویتی های مختلف جابجا میشود.

وقتی که یک اکتیویتی، اکتیویتی دیگری را ایجاد میکند، باید آنها را به هم لینک دهید. برای ایجاد اکتیویتی از ()startActivity یا ()startActivityForResult استفاده میشود و باید یک Intent را هم ارسال کنید.

 

ایجاد اکتیویتی بدون result

()startActivity زمانی استفاده میشود که اکتیویتی نباید نتیجه ای را برگرداند.

قطعه کد زیر نحوه ایجاد اکتیویتی با استفاده از این متد را نمایش داده است:

 

علاوه بر این میتوانید عملیاتی مانند ارسال داده از یک اکتیویتی به دیگری را هم انجام دهید. در این مورد اکتیویتی فعلی میخواهد داده را به اکتیویتی هدف بفرستد. در این شرایط Intentها به کمک شما می آیند.

 

ایجاد اکتیویتی با result

()startActivityForResult زمانی به کار برده میشود که میخواهید اکتیویتی دیگری را شروع کنید که میخواهد از اکتیویتی که به تازگی ساخته شده، داده ای را دریافت نماید. به بیان دیگر از این متد در شرایطی استفاده کنید که میخواهید از اکتیویتی هدف جوابی دریافت کنید. برای مثال اگر اکتیویتی هدف اطلاعات کاربر را در یک دیالوگ مودال جمع آوری میکند، استفاده از این متد گزینه خوبی خواهد بود.

نتیجه اکتیویتی را در متد (onActivityResult(int requestCiode, int resultCode, Intent data دریافت خواهید کرد که به صورت یک Intent بازگردانده میشود.

 

مثال هایی از ایجاد اکتیویتی

در زیر مثالی از نحوه کار اکتیویتی نمایش داده شده است:

اول از همه باید یک MainActivity با استفاده از متد ()onCreate، یک فایل لی اوت و request code بسازید.

 

در متد ()onCreate یک نمونه اولیه جدید از intent برای ایجاد اکتیویتی دوم بسازید.

وقتی برای ایجاد اکتیویتی آماده شدید، مثلا دکمه کلیک شد، باید ()startActivityForResult را که intent جدید و request code را میفرستد فراخوانی کنید.

 

باید در MainActivity ایونت های result اکتیویتی را مدیریت کنید. این کار با جایگذاری ()onActivityResult انجام میشود و بدین ترتیب از اکتیویتی دیگر نتیجه را دریافت میکنید.

به صورت زیر:

 

حال باید اکتیویتی دوم را بسازید، برای این کار از کد زیر استفاده کنید.

 

بستن اکتیویتی

پیش از اینکه اکتیویتی بسته شد، متدهای زیر باید فراخوانی شوند.

متد ()onPause باید تمام لیسنرها و آپدیت های UI را متوقف کند.

متد ()onStop باید داده های اپلیکیشن را ذخیره کند. در آخر متد ()onDestroy هر منبعی را که به آن اکتیویتی تخصیص داده شد، آزاد میکند. وقتی کاربر به اپلیکیشنی بازمیگردد که توسط سیستم بسته شده، متد ()onResume صدا زده میشود. لینسرها بر اساس داده هایی که ذخیره شده اند مجددا رجیستر و آپدیت های UI تریگر میشوند.

 

وضعیت نمونه اولیه اکتیویتی

اکتیویتی به راهی برای ذخیره سازی وضعیت های مهم و داده های دریافتی از کاربر نیاز دارد. این داده ها ممکن است از ورودی کاربر دریافت شده باشند یا وقتی اکتیویتی در حال نمایش نبوده، ساخته شده باشند.

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

 

برای ذخیره وضعیت اکتیویتی، میتوانید متد ()onSaveInstantState را اورراید کنید. این متد یک آبجکت Bundle را به عنوان پارامتر ارسال میکند. Bundle میتواند شامل رشته ها، انواع داده های اولیه یا آبجکت ها باشد. هر داده وضعیتی مهم را به bundle اضافه کنید. این bundle به اکتیویتی بازگردانده میشود و میتوانید وضعیت اکتیویتی را بازپس گیری کنید.

برای خارج کردن وضعیت های ذخیره شده از bundle و بازپس گیری آنها، متد ()onRestoreInstantState را جایگذاری نمایید. این فراخوانی بین متدهای ()onStart و ()onResume صورت میپذیرد.

جمع بندی

با خواندن این مقاله درک بهتری از Lifecycle اکتیویتی پیدا کردید و با روش های ایجاد اکتیویتی آشنا شدید.

 

منبع:

https://code.tutsplus.com