آموزش کار با اکتیویتی ها در اندروید

[two_third]

هر اکتیویتی یک صفحه با رابط کاربری را نمایش می دهد، درست مثل یک پنجره یا یک فریم از جاوا. اکتیویتی اندروید، زیر کلاسی از کلاس ContextThemeWrapper می باشد.اگر با C، C++ یا زبان برنامه نویسی جاوا کار کرده باشید، پس حتما با متد main() آشنا هستید که هر برنامه ای با آن شروع می شود. بسیار شبیه به این روش، اندروید نیز برنامه خود را در شروع اکتیویتی با فراخوانی متد callback ای به نام onCreate() شروع می کند. دنباله ای از متدهای callback وجود دارند که اکتیویتی را شروع می کنند و دنباله ای دیگر نیز برای از بین بردن اکتیویتی وجود دارند.

[/two_third] [one_third_last]

اکتیویتی

[/one_third_last]

 

در زیر چرخه حیات اکتیویتی را مشاهده می نمایید:

اکتیویتی

کلاس اکتیویتی call back های زیر را تعریف می کند. ما نیاز نداریم که همه متدهای callback را پیاده سازی کنیم. اگرچه، آشنایی با هر یک از آن ها مهم است و پیاده سازی آن ها تضمین می کند که اپلیکیشن شما به همان گونه ای رفتار می کند که کاربر انتظار دارد.

اکتیویتی

لیست Call backها

onCreate() – این اولین متد است و زمانی که اکتیویتی ایجاد می شود، فراخوانی می شود.

onStart() – این متد زمانی که اکتیویتی به کاربر نمایش داه می شود، فراخوانی می گردد.

onResume() – این متد زمانی که کاربر تعامل با اپلیکیشن را شروع می کند، فراخوانی می شود.

onPause() –  اکتیویتی که pause شده است، هیچ ورودی از کاربر دریافت نکرده و هیچ گونه کدی را نمی تواند اجرا کند و زمانی فراخوانی می شود که این اکتیویتی pause شده و اکتیویتی قبلی resume می شود.

onStop() – وقتی برای زمان نسبتا زیادی اکتیویتی در حال نمایش نباشد، این متد فراخوانی می شود.

onDestroy() – این متد قبل از اینکه اکتیویتی توسط سیستم از بین برود، صدا زده می شود.

onRestart() – این متد زمانی فراخوانی می شود که اکتیویتی بعد از stop شدن restart شود.

مثال:

مثال زیر گام های ساده ای را طی کرده و چرخه حیات اپلیکیشن اندروید را به شما نشان می دهد. مراحل زیر را دنبال کرده و اولین برنامه را که در جلسه ششم ایجاد کردیم، تغییر می دهیم.

فایل MainActivity.java را به شکل زیر تغییر می دهیم و بقیه فایل را بدون تغییر نگه می داریم.

برنامه را روی ایمولاتور اجرا کرده و تغییرات اعمال شده را مشاهده می کنیم.

کد زیر، محتوای تغییر یافته فایل main activity می باشد. این فایل شامل همه متدهای اساسی در چرخه حیات اکیتیویتی می باشد. متد Log.d() برای ایجاد لاگ استفاده می شود.


package com.example.topic08;

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");
}
}

 

یک کلاس اکتیویتی همه کامپوننت های UI را با استفاده از فایل XML ای که در فولدر res/layout پروژه موجود است بارگذاری می کند. عبارت زیر کامپوننت های UI را از res/layout/activity_main.xml بارگذاری می کند.


setContentView(R.layout.activity_main);

هر اپلیکیشن می تواند یک یا چند اکیتویتی بدون هیچ محدودیتی داشته باشد. هر اکتیویتی که برای اپلیکیشن تعریف می شود، باید در فایل AndroidManifest.xml اعلام شوند و main activity اپلیکیشن باید با یک <intent-filter>  اعلان شود که شامل action ای با مقدار MAIN و category با مقدار LAUNCHER باشد به صورت زیر:


<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.topic08"
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>

اگر مقدار MAIN و LAUNCHER به ترتیب برای action و category هیچ یک از اکتیویتی های اپلیکیشن تعریف نشود، اپلیکیشن شما در صفحه Home گوشی و در لیست اپلیکیشن ها نمایش داده نخواهد شد.

حالا برنامه ای را که تغییر دادیم، امتحان می کنیم. برنامه را روی ایمولاتور اجرا می کنیم و اگر همه چیز به درستی پیش برود، پیغام های زیر را در Logcat مشاهده خواهیم کرد.

حالا روی دکمه قطع تماس ایمولاتور اندروید کلیک می کنیم، پیغام های زیر تولید می شود:


۰۴-۱۷ ۰۹:۲۰:۱۳.۹۹۱ ۳۲۲۸-۳۲۲۸/com.example.topic08 D/Android :: The onPause() event
۰۴-۱۷ ۰۹:۲۰:۱۵.۰۳۱ ۳۲۲۸-۳۲۲۸/com.example.topic08 D/Android :: The onStop() event

حالا دوباره روی دکمه MENU در ایمولاتور کلیک می کنیم و می توانیم پیغام های جدید تولید شده را مشاهده نماییم.


۰۴-۱۷ ۰۹:۲۱:۴۴.۴۶۱ ۳۲۲۸-۳۲۲۸/com.example.topic08 D/Android :: The onStart() event
۰۴-۱۷ ۰۹:۲۱:۴۴.۴۶۱ ۳۲۲۸-۳۲۲۸/com.example.topic08 D/Android :: The onResume() event

حالا اگر روی دکمه Back کلیک کنیم، پیام های زیر را مشاهده خواهیم کرد. همانطور که می بینید چرخه حیات اپلیکیشن در اینجا به پایان می رسد.


۰۴-۱۷ ۰۹:۲۰:۱۳.۹۹۱ ۳۲۲۸-۳۲۲۸/com.example.topic08 D/Android :: The onPause() event
۰۴-۱۷ ۰۹:۲۰:۱۵.۰۳۱ ۳۲۲۸-۳۲۲۸/com.example.topic08 D/Android :: The onStop() event

فاطمه زکایی

فاطمه زکایی هستم. فارغ التحصیل کارشناسی مهندسی نرم افزار، مدت سه سال هست که در زمینه توسعه اپلیکیشن های تحت وب و اندروید و همچنین تولید محتوای تخصصی برنامه نویسی تحت وب و اندروید در مجموعه mspsoft در خدمت شما هستم.

نوشته‌های مرتبط

دیدگاه‌ها

*
*

این سایت از اکیسمت برای کاهش هرزنامه استفاده می کند. بیاموزید که چگونه اطلاعات دیدگاه های شما پردازش می‌شوند.

    مج ن پاسخ

    ممنون از مقاله خوبتون.

ما یک پرسشنامه‌ی کوچولو داریم، که قول میدیم وقتتون رو خیلی نمی‌گیره، ولی کلی به ما کمک می‌کنه، چون هم assessment مونه ,و هم شما به ما در این زمینه کمک میکنید.بزن بریم