16- اکتیویتی ها - بخش اول
آدرس مطلب اصلی: http://developer.android.com/guide/components/activities.html
Activity
بخشی از بسته نرم افزاری است که وظیفه نمایش رابط کاربری را به عهده دارد و کاربران می توانند از آن برای تعامل با کاربرد استفاده کنند، مانند صفحه کلید مجازی و شماره گیری، ارسال پست الکترونیکی، مشاهده نقشه. هر activity پنجره ایی در اختیار دارد که می تواند در آن رابط کاربری خود را ترسیم کند. این پنجره معمولاً کل صفحه نمایش را پر می کند، اما ممکن است این پنجره کوچکتر از کل صفخه نمایش باشد و بر روی پنجره های دیگر نیز جابه جا شود.
یک کاربرد، معمولاً از چندین activity تشکیل می شود که وابستگی کمی (loosely bound) به هم دارند. معمولاً یکی از آنها activity اصلی است، که در هنگام شروع کاربرد به عنوان اولین صفحه نمایش داده می شود. هر activity می تواند برای انجام کارهای مختلف دیگر activity های دیگری را نیز فراخوانی کند. نحوه مدیریت activity ها در اندروید به صورت پشته ایی (back stack) است. هر زمان که یک activity جدید شروع می شود، بر بالای پشته قرار می گیرد و به کاربر نمایش داده می شود و activity قبلی متوقف و وضعیت آن در پشته نگهداری می شود. همانطور که می دانید، پشته، صفی است که از مکانیزم "last in, first out" استفاده می کند، بنابراین هنگامی که کار کاربر با activity در حال اجرا تمام شود و دکمه عقب را انتخاب کند، activity در حال اجرا که در بالای پشته قراردارد از بین می رود و سیستم activityمتوقف شده قبلی را نمایش می دهد.
هنگامی که یک activity به خاطر شروع یک activity دیگر متوقف می شود، activity در حال توقف، با استفاده از متدهای callback که برای این کار در نظر گرفته شده است از تغییر وضعیت خود مطلع شود و می تواند قبل از توقف کامل، وضعیت خود را ذخیره کند. متدهای callback فراوانی وجود دارند که یکactivity می تواند با استفاده از آنها از تغییر وضعیت هایی مانند creating،stopping، resuming وdestroying مطلع شود و قبل از تغییر وضعیت، کار مناسب را انجام دهد. برای مثال، هنگامی که یکactivity متوقف می شود، باید اشیائی که منابع زیادی از سیستم را مصرف کرده اند از بین بروند، مانند ارتباطات شبکه و پایگاه داده. سپس هنگامی که activity دوباره شروع به کار کرد، منابع مورد نیاز را به خود اختصاص دهد. این تغییر وضعیت ها همگی جزئی از activity lifecycle هستند که در ادامه بیشتر شرح داده می شوند.
ایجاد Activity
برای ایجاد یک activity، شما باید یک زیر کلاس از کلاس Activity را ایجاد کنید، سپس در زیرکلاس ایجاد شده، باید متدهای callback ئی که سیستم هنگام تغییر وضعیت ها فراخوانی می کند را پیاده سازی کنید. دو تا از مهمترین متدهای callback عبارتند از:
onCreate()
یکی از مهمترین متدهایی که شما باید آن را پیاده سازی کنید، این متد است. سیستم هنگامی کهactivity شما را ایجاد می کند این متد را فراخوانی می کند. در هنگام پیاده سازی این متد، شما باید بخش های ضروری activity خود را مقداردهی اولیه کنید. این متد جائی است که شما باید متدsetContentView() را فراخوانی کنید تا چیدمان (layout) رابط کاربری activity مشخص شود.
onPause()
هنگامی که کاربر در حال ترک کردن activity شما است سیستم این متد را به عنوان اولین نشانه فراخوانی می کند. این متد جایی است که شما باید وضعیت و تغییراتی را که کاربر ایجاد کرده است را ذخیره کنید (چون ممکن است کاربر به activity شما باز نگردد).
طراحی رابط کاربر
به وسیله سلسه مراتبی از اشیای view که از کلاس های view مشتق شده اند می توان به activity دسترسی پیدا کردهر view ،بخش ویژه ای در پنجره activity را کنترل می کند و به واکنش کاربر پاسخ می دهد .
به طور مثال view ای که شامل یک دکمه است با لمس کردن یک دکمه توسط کاربر یک فعالیت (کار)نجام می شود اندروید شماری از object های view از پیش ساخته شده را آماده کرده است که شما می توانیدبه منظور طراحی و سازماندهی layout هایتان استفاده بکنید .
ابزارک ها view هایی هستند که یک سری عناصر تعاملی و گرافیکی را برای صفحه نمایش فراهم می کند از قبیل button: text field, checkbox, image
Layout ها view هایی هستند که از view group مشتق شده اند و یک layout برای object های از نوع view محسوب می شود از قبیل linear layout, grid layout, relative layout شما می توانید همچنین یک زیر کلاسی از کلاس viewیا کلاس view group بسازید تا ابزار ها و layout های خودتان را layout activity قرار دهیم.
رایج ترین روش برای تعریف یک layout این است که یک فایل با پسوند XMLدر پوشه resource بسته نرم افزار یمان ایجاد کنیم .به این ترتیب شما می توانید طرحی را بدون توجه به source کد برای رابط کاربریتان ایجاد کنید که این طرح رفتار activity را توصیف می کند .
شما می توانید layout تان را به عنوان رابط گرافیکی activity تان با استفاده از set content viewتنظیم کنید .این کار با استفاده از کد های آماده انجام می شود (کد هایی که در خود برنامه وجود دارد )
به هر حال این امکان وجود دارد که view هایی جدید به طور مستقیم توسطactivity ایجاد شود و view های تودرتو به وسیله وارد کردن view هایی از پنل view group ایجا شوند سپس برای نمایش دادن view group از یک layout استفاده کنید.
تعریف activity در manfest
بایدactivity در فایل mainfest تعریف شود تا توسط سیستم قابل دسترسی باشد برای تعریف activity تان فایل manifest را باز می کنید یک activity را به عنوان فرزندی از بسته نرم افزار اضافه کنید برای مثال :
چندین ویژگی دیگری وجود دارد که شما می توانید در ان بخش تعریف کنید و تعریف جزییات از قبیل lableبرای activity یک آیکون برای activity یا یک تم برای رابط گرافیکی activity تان ساخته می شود .
android:name
: :صفت اندروید تنها صفتی است که به یک صفت دیگر
وابسته و نیازمند است که نام کلاس مورد فعالیت خودش را مشخص می کند زمانی که می خواهید application تان را
مشخص کنید نباید نامش را تغییر دهید به خاطر اینکه اگر این کار را انجام دهید شما
عملا دسترسی کاربران به آن را را از بین
می برید مثل:
application shortcuts
استفاده از intent فیلتر :
یک المان activity می تواند چندین intent فیلتر برای خودش داشته باشد از intent-filter به منظور مشخص کردن اینکه چگونه اجزای نرم افزاری فعالیت خود را آغاز میکند استفاده می شود .زمانی که با استفاده از ابزار های Android SDK می خواهید یک intent filter جدید بسازید Activity اصلی به صورت خودکار که شامل intent filter است که main را مشخص می کند این بایددر طبقه بندی launcher ها قرار بگیرد .
Intent filter به این شکل است ...
المان action مشخص می کند که این تابع بالا ورودی main در application است.المان category فعالیتی را که باید در launcher سیستم application لیست شود مشخص می کند که برای کاربران اجازه اجرای این activity داده شده است.اگر می خواهید که application شما به صورت مستقل ( خود محور) باشد و سایر application ها فعالیت های آن را اجرا کنند پس نباید از هیچ intent filter دیگری استفاده کنید.
Activity فقط باید "main" action و "launcher" category را داشته باشد ، همانند مثال قبل
Activity هایی که نمی خواهید برای سایر application ها در دسترسی باشد نباید هیچ intent filter داشته باشند و برای شروع آنها برای خودتان می توانید از explicit intents ها استفاده کنید که در ادامه بحث خواهد شد .
با این وجود اگر می خواهید activity شما به سایر intent های ضمنی که از سایر application های دیگر فرستاده می شود ، پاسخ داده شود.شما باید یک intent فیلتر اضافی برای activity خود در نظر بگیرید ، برای هر نوع intent ،که Activity شما می خواهد به آن پاسخ دهد باید intent filter که شامل المان اکشن و یک المان category اختیاری و یا یک المان دیتا دارد شامل باشد.
شروع یک activity
با صداکردن تابع start activity می توانید activity را شروع کنید. داخل این تابع یک intent وجود دارد که نوع فعالیت هایی که می خواهید شروع شود را تشریح می کند . intent نوع فعالیت هایی را که می خواهد انجام بشود مشخص می کند و یا نوع action که می خواهد به اجرا در بیاید را تشریح می کند ( و سیستم فعالیت متناسب Activity شما را انتخاب می کند که حتی ممکن است برای یک application دیگری باشد) یک intent می تواند در داخل خود مقداری داشته باشد که برای شروع activity مورد نیاز است. وقتی که با application تان کار می کنید اغلب شما یک activity شناخته شده را اجرا می کنید.
با استفاده از class name و ایجاد یک intent
صراحتا نوع فعالتی که نمی خواهید آن را شروع کنید تعریف می کند. مثلا نمونه زیرActivity دیگری به نام SignInActivity
را
اجرا می کند.
با وجود اینکه application تان ممکن است بعضی از عملکرد ها از قبیل فرستادن E-Mail ، Text Massage یا به روز رسانی استفاده از اطلاعات activity را انجام ندهد در این مورد برنامه تان ممکن است activity هایی را برای اجرایAction ها .نداشته باشد تا آن رااجرا بکند.
بنابرین میتوانید به جای کار با activity های موجود بسته نرم افزاری action ها را اجرا کنید این همان جایی است که intent ها دارای مقادیر معتبر هستند شما با ایجاد یک intent عملی را که می خواهید انجام دهید توصیف می کنید. و Lunch System activity را از Application دیگری آماده می کند.
Activity های مختلف توسط intent ها مدیریت می شوند و سپس کاربر می تواند آنچه را که استفاده می کند انتخاب کند برای مثال اگر شما می خواهید تا کاربر یک پیام متنی بفرستد شما می توانید intent زیر را ایجاد کنید.
EXTRA_EMAIL اضافه شده ایمیلی را که به intent فرستاده شود می باشد یک آرایه از نوع رشته از آدرس های ایمیل است که ایمیل مورد انتخاب را می فرستد هنگامی که یک application به ایمیل intent پاسخ می دهد آرایه از نوع رشته را فراهم کرده و آن را می خواند و در فیلد ارسال فرم قرار می دهد از این طریق activity به شروع به باز کردن می کند و تا هنگامی که کار کاربر انجام نشده activity تان ادامه پیدا می کند .
شروع یک activity برای دستیابی به نتیجه خاص
بعضی مواقع ممکن است شما
بخواهید که نتیجه ای را از activity که شروع کره اید دریافت
کنید در این مواقع activity را با فراخوانی startActivityForResult()
به جای
startActivity.موقعی که
activity زیر شاخه انجام می شود
.سپس نتیچجه را از activity دریافت می کندوپیادهسازی می کند متدonActivityResult() callback
زمانی که activity بعد از آن انجام شد یک
نتیجه را به عنوان یک intent به متد ()onActivityResult برمی گرداند.
به عنوان مثال شاید شما بخواهید که کاربر یکی از مخاطبین خود را انتخاب بکند بنابراین activity تان با دسترسی به اطلاعات آن contact کار هر کاری را انجام می دهد در اینجا شما می توانید بفهمید که چگونه یک intent و خروجی آن ساخته می شود
این مثال نشان می دهد پایه منطقی که شما استفاده می کنید در متد onActivityResult به منظور اینکه خروجی یک activityرا نشان دهید شرط اول چک می کند که آیا درخواست با موفقیت انجام شده است یا نه در صورت مثبت بودن انجام درخواست خروجی کد یک okey به ما نشان می دهد و در صورتی که نتیجه ی خروجی با توجه به در خواست انجام شود در این مورد پاسخ کد این است که پارامتر دوم را با استفاده از startActivityForResult() می فرستد .در اینجا کد نتیجه activity را به وسیله واکشی اطلاعات به عنوان یک intent مدیریت می کند .
بستن یک فعالیت
شما می توانید یک activity را به وسیله صدا زدن تابع finish ببندید.شما می توانید یک actibvity را به صورت جداگانه که قبلا آغاز شده است را به وسیله تابع finishActivity() ببندید
مدیریت چرخه حیات activity
۱- Active/running state
این وضعیتی است که Activity در جلو (front) قرار دارد و focus روی آن قرار دارد یعنی Activity صفحه ای است که در مقابل کاربر آشکار شده و فعال است.
۲- Paused stse
در وضعیت paused یا توقف Activity به صورت جزئیات (partially) برای کاربر آشکار است ولی focus روی آن قرار ندارد و صفحه به صورت فعال نیست.
این وضعیت زمانی اتفاق می افتد که یک Activity دیگر روی این Activity قرارمی گیرد ولی تمام صفحه را پوشش نمی دهد و یا Activity که روی آن قرار می گیرد دارای شفافیتی (transparancy) است که باعث می شود صفحه زیر آن آشکار باشد. در این وضعیت (Activity (paused به طور کامل در جریان است و وضعیت خود را نگه می دارد ولی زمانی که سیستم دچار کمبود حافظه شود و راه دیگری برای آزاد کردن حافظه نداشته باشد این صفحه را از بین می برد.
۳- Destroyed/Dead state
زمانی به یک Activity مرده یا نابوده شده گفته می شود که دیگر در حافطه وجود نداشته باشد. یک Activity زمانی در این وضعیت است که یا هنوز state نشده و یا یک بار شروع شده و یا در وضعیت stopped یا paused برای آزاد سازی منابع نابود (kill) شده است.
پیاده سازی چرخه callback ها :
وقتی که یک Activity به یک حالت متفاوت دیگر که در بالا به آن اشاره شد انتقال پیدا کند از میان فراخوانی متد های مختلف اطلاع حاصل می شود تمام متدهای Callback مانند دست آویز هایی هستند که برای لغو حالت تغییر یافته مناسب استفاده می شود ساختار Activity زیر شامل تمام حالات متد های ابتدایی Life cycle می باشد.
- ۹۳/۰۳/۰۳
اگر قبلا در بیان ثبت نام کرده اید لطفا ابتدا وارد شوید، در غیر این صورت می توانید ثبت نام کنید.