اکتیوتی ها در اندروید
یک اکتیویتی ، یک صفحه ی را به همراه رابط کاربری گرافیکی آماده میکند . درست همانند یک پنجره ی ویندوزی یا یک فریم جاوایی .
اکتیویتی های اندرویدی نوعی کلاس هستند که از کلاس ContextThemeWrapper ارث بری میکنند
فایل ویدیویی این آموزش بصورت فارسی و با کیفیت بالا قرار داده شد لطفا از لینک زیر دانلود کنید :
اگر شما با زبان های برنامه نویسی مثل C , C++ ,java کار کرده باشید حتما" میدانید که این زبانها هنگام شروع از یک متدی مانند main() شروع میکنند . در برنامه نویسی اندروید نیز چنین هست با این تفاوت که در اندروید برنامه با یک Activity و از متد onCreate() آن شروع میکند .
در هر اکتیویتی در برنامه نویسی اندروید سلسه مراتبی برای اجرای متدهای درونی این کلاس وجود دارد که به این سلسه مراتب اصطلاحا" LifeCycle یا چرخه ی حیات میگویند
در تصویر زیر چرخه ی حیات یک اکتیویتی را مشاهده میکنید :

چرخه ی حیات اکتیویتی
هر اکتیویتی اندرویدی از متدههای پیشفرض استفاده میکند و شما نیاز به فراخوانی همه ی آنها نیستید . بعضی از آنها اجباری هستند و برخی بصورت اختیاری هستند که در صورت نیاز میتوانید از طریق محیط برنامه نویسی خود ، آنها را override کنید .
به هر حال دانستن و آموزش متدهای هر اکتیویتی بسیار مفید خواهد بود تا در آینده در صورت نیاز راحت تر بتوانید درک درستی از متدهای اکتیویتی داشته باشید :
متد | توضیحات |
onCreate() | این اولین متد یک اکتیویتی هست که با شروع اکتیویتی اجبارا" اجرا میشود . نوشتن این متد یکی از ضرورات برنامه نویسی اندروید هست . |
onStart() | این متد دقیقا" زمانی اجرا میشود که اکتیویتی روی صفحه نمایش ، به نمایش گذاشته میشود |
onResume() | این متد دقیقا" زمانی اجرا میشود که کاربر با برنامه اولین تعامل را برقرار بکند یعنی اکتیویتی را روی صفحه ببیند |
onPause() | این متد زمانی اجرا میشود که اکتیویتی هیچ ورودی را از کاربر دریافت نکند . هیچ کدی را اجرا نکند . و به اصطلاح به حالت Pause درآید |
onStop() | این متد دقیقا" زمانی اجرا میشود که اکتیویتی از صفحه ی نمایش محو میشود |
onDestroy() | این متد زمانی اجرا میشود که اکتیویتی توسط سیستم نابود شود |
onRestart() | این متد زمانی اجرا میشود که قبل از Stop شدن اکتیویتی مجددا اجرا شود |
مثال برای متد های اکتیویتی در برنامه نویسی اندروید
این مثال چرخه ی حیات اکتیویتی را به روش ساده ای برای شما نشان میدهد . مراحل زیر را طی کنید ، مراحل زیر را برای مثال hello world که قبلا ساختیم ، طی کنید :
مرحله | توضیحات |
۱ | در مرحله ی اول شما محیط توسعه ی خود را باز کنید و یک پروژه به نام hello world با نام بسته ی com.example.helloworld بسازید |
۲ | اکتیویتی اصلی برنامه را MainActivity.java نام گذاری کنید و باقی فایل ها را همانطور باقی بگذارید |
۳ | برنامه را اجرا کنید تا در امولاتور شما نصب و اجرا گردد |
در زیر محتویات فایل اکتیویتی اصلی که نامش را تغییر دادیم قرار دارد . این فایل باید در آدرس src/com.example.helloworld/MainActivity.java باشد .
کدهای زیر دارای تمام متدهای اساسی ، چرخه ی حیات یک اکتیویتی اندروید میباشد . متد Log.d() برای تولید پیام های سیستمی هست که فقط در logcat محیط توسعه ی شما قابل مشاهده توسط توسعه دهنده میباشد .
package com.example.helloworld; import android.os.Bundle; import android.app.Activity; import android.util.Log; public class MainActivity extends Activity { String msg = "Android : "; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.d(msg, "The onCreate() event"); } /** Called when the activity is about to become visible. */ @Override protected void onStart() { super.onStart(); Log.d(msg, "The onStart() event"); } /** Called when the activity has become visible. */ @Override protected void onResume() { super.onResume(); Log.d(msg, "The onResume() event"); } /** Called when another activity is taking focus. */ @Override protected void onPause() { super.onPause(); Log.d(msg, "The onPause() event"); } /** Called when the activity is no longer visible. */ @Override protected void onStop() { super.onStop(); Log.d(msg, "The onStop() event"); } /** Called just before the activity is destroyed. */ @Override public void onDestroy() { super.onDestroy(); Log.d(msg, "The onDestroy() event"); } }
هر اکتیویتی تمام کامپوننت های رابط کاربری را با استفاده از XML از درون فایل res/layout فراخوانی میکند ، کد زیر فایل layout موجود در res/layout/activity_main.xml را فراخوانی میکند :
setContentView(R.layout.activity_main);
هر برنامه ی اندرویدی بسته به نیاز خودش میتواند بدون هیچ محدودیتی اکتیویتی داشته باشد . هر اکتیویتی که برای برنامه میسازید حتما باید درون فایل AndroidManifest.xml معرفی کنید تا برنامه اکتیویتی های شما را بشناسد.
همچنین شما اکتیویتی اصلی برنامه ی را باید از طریق <intent-filter> معرفی کنید تا برنامه ی شما از آن اکتیویتی شروع به فعالیت بکند
کدهای زیر مربوط به یک مانیفست میباشد :
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.helloworld" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="22" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".MainActivity" android:label="@string/title_activity_main" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> </application> </manifest>
اگر چنانچه شما کدهای android.intent.action.MAIN و android.intent.category.LAUNCHER را برای هیچ یک از اکتیویتی های خود تعریف نکنید بدین معنی که هیچ یک از اکتیویتی های شما اکتیویتی اصلی برنامه نباشد که برنامه از آنجا شروع کند ، بعد ازنصب برنامه هیچ آیکونی برای برنامه ی شما در لیست برنامه ها ، ظاهر نخواهد شد .
بیایید برگردیم به مثال Hello World که در بالا تغییرااتی را روی این مثال اعمال کردیم . یک ماشین مجازی اندروید روی محیط خود بسازید (Genymotion یا ماشین مجازی AVD ) سپس برنامه را اجرا کنید . چیزی که در LogCat مشاهده خواهید کرد بدین شکل خواهد بود :
۰۷-۱۹ ۱۵:۰۰:۴۳٫۴۰۵: D/Android :(866): The onCreate() event ۰۷-۱۹ ۱۵:۰۰:۴۳٫۴۰۵: D/Android :(866): The onStart() event ۰۷-۱۹ ۱۵:۰۰:۴۳٫۴۱۵: D/Android :(866): The onResume() event
حالا شما روی آیکون قرمز رنگ روی ماشین مجازی (همان دکمه که مخصوص قطع مکالمه روی گوشی های اندرویدی هست ) کلیک کنید . باید در LogCat برنامه با نوشته های زیر برخورد کنید :
۰۷-۱۹ ۱۵:۰۱:۱۰٫۹۹۵: D/Android :(866): The onPause() event ۰۷-۱۹ ۱۵:۰۱:۱۲٫۷۰۵: D/Android :(866): The onStop() event
اگر درون ماشین مجازی اندروید خود ، به منوی برنامه ها بروید و مجددا" برنامه را باز کنید با نوشته های زیر درون LogCat مواجه خواهید شد :
۰۷-۱۹ ۱۵:۰۱:۱۳٫۹۹۵: D/Android :(866): The onStart() event ۰۷-۱۹ ۱۵:۰۱:۱۴٫۷۰۵: D/Android :(866): The onResume() event
و اگر مجددا" از درون برنامه دکمه ی Back یا بازگشت روی دستگاه اندروید را بزنید LogCat نوشته های زیر را چاپ خواهد کرد :
۰۷-۱۹ ۱۵:۳۳:۱۵٫۶۸۷: D/Android :(992): The onPause() event ۰۷-۱۹ ۱۵:۳۳:۱۵٫۵۲۵: D/Android :(992): The onStop() event ۰۷-۱۹ ۱۵:۳۳:۱۵٫۵۲۵: D/Android :(992): The onDestroy() event
تمام رشته هایی که در LogCat به نمایش در آمده بود برای تست کردن چرخه ی حیات یک اکتیویتی توسط خود ما نوشته شده بودند با تامل روی تصویر چرخه ی حیات و همچنین خواندن متون بالا با دقت و حوصله و همچنین تست برنامه از طریق محیط واقعی برنامه نویسی اندروید توسط خود شما باعث میشود که درک درستی از چرخه ی حیات به دست آورید که سنگ بنای مهم برنامه نویسی شما خواهد بود

پرسش و پاسخ این آموزش