Activities, Fragments و Intents
بسم الله الرحمن الرحیم
Activities, Fragments و Intents
فصل دوم- بخش دوم
در پایان این فصل با موارد زیرآشنا می شود
- چرخه ی زندگی(Life Cycle ) یک Activity
- آشنای با Fragment ها و شخصی سازی UI
- اعمال Style ها و Theme ها بر روی UI
- شرح می دهیم که چه طور یک Activity را مانند Dial g Wind ws نمایش دهیم
- با مفهوم Intent ها آشنا می شویم.
- استفاده از شی ( bject ) Intent برای لینک بین Activity ها
- فهمیدن اینکه intent filter ها چگونه به شما کمک می کند تا به صورت دلخواه با دیگر Activity ها ارتباط برقرا کنید
- نمایش Alert ها به کاربران با استفاده از notificati n ها
در فصل اول شما یاد گرفتید که یک activity پنجره ا ی است شامل تمام Ui ها برنامه های کاربردی شما می باشد. یک برنامه ی کاربردی می تواند یک یا بیشتر Activity داشته باشد. هدف اصلی یک Activity ارتباط(interact) با کاربر می باشد.
activity برای یک زمان در صفحه نمایش ظاهر می شود و در لحظه دیگر مخفی می باشد یک activity در حالت های مختلف قرار می گیرد. که قرار گرفتن در حالت های مختلف را چرخه ای زندگی(Life Cycle) می گویند. فهمیدن چرخه ی زندگی یک activity امر حیاتی است زیرا به شما کمک می کند تا مطمئن شوید برنامه کاربردی به درستی کار می کند.
اندروید 4 علاوه بر پشتیبانی از ویژگی های اندروید 3 دارای ویژگی جدیدی می باشد به نام :Fragment برای اینکه مفهوم Fragment را به خوبی متوجه شوید فرض کنید که Fragment ها Acitivity ها کوچکی هستند که می توانیم در یک Activity گروه بندی کنیم.
در این فصل شما با activity ها و Fragment ها آشنا می شوید.صرف نظر از activity ها مفهوم اصلی دیگر در اندروید intent می باشد. یک Intent به طور اساسی یک کلاس می باشد که activityهای متفاوت دیگر را قادر می سازد که با یکدیگر به صورت یک پارچه باهم کار کنند. در فصل های بعدی شما یاد می گیرید که چگونه برنامه های از پش ساخته سیستم عامل اندروید می توانند با هم کار کنند.
Activity ها
درفصل قبل شما یاد گرفتید که چگونه می توان یک activity ایجاد کرد.برای ساخت یک activity شما یک کلاس جاوا ایجاد کردید که از کلاس پایه) Activity مشتق (یا در جاوا به آن Extends می گویند ) شده بود.
package com.myandroid.helloandroid;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
کلاس activity شما قسمت های Ui را که یک فایل XML می باشدرا بارگزاری (Load) می کند. این فایل Xml در پوشه Res\layout می باشد.
شما Ui را از فایل Activity_main.Xml بارگزاری می کنید.
setContentView(R.layout.activity_main);
هر activity که شما در برنامه استفاده می کنید باید در فایل Androidmainfest.xml تعریف شود.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.myandroid.helloandroid"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="14" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.myandroid.helloandroid.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
کلاس پایه Activity ی سری از Event ها را تعریف می کنند که چرخه زندگی یک activity را کنترل می کنند. کلاس activity
Event های زیر را تعریف می کند:
- onCreate(): زمانی فراخوانی می شود که activity برای اولین بار ایجاد شده است
- onStart(): زمانی فراخوانی می شود که activity به کاربر نمایش داده می شود.
- onResume(): زمانی اجرا می شود که activity با کاربر در تقابل(Intractive) است
- onPause(): زمانی اجرا می شود که activity جاری به جالت Pause برورد و activity قبلی به حالت Onresume برورد فراخوانی می شود.
- onStop(): زمانی فراخوانی می شود که activity برای مدا طولانی به کاربر نمایش داده نمی شود.
- onDestroy(): زمانی فراخوانی می شود که Activity به کلی از بین برود. چه به وسیله کاربر و چه به وسیله سیستم به دلیل کمبود حافظه.
- onRestart(): زمانی فراخوانی می شود که activity از حالت Stop دوباره راه اندازی می شود.
به طور پیش فرض محتوای activity در رویداد onCreate() ایجاد می شود.
در شکل زیر چرخه زندگی یک activity از زمانی که شروع می ود وتا پایان نمایش داده شده است.
بهترین راه برای فهمیدن چرخه زندگی یکactivity عنوان آن با یک مثال می باشد.
درون Eclipse یک پروژه با نام Activity101 ایجاد کنید.
ودر فایل \MainActivity.java کد های زیر را وارد کنید.
package com.myandroid.activity101;
import android.R.string;
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
public class MainActivity extends Activity {
String tag="LifeCycle" ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d(tag, "In the onCreate() event");
}
public void onStart()
{
super.onStart();
Log.d(tag, "In the onStart() event");
}
public void onRestart()
{
super.onRestart();
Log.d(tag, "In the onRestart() event");
}
public void onResume()
{
super.onResume();
Log.d(tag, "In the onResume() event");
}
public void onPause()
{
super.onPause();
Log.d(tag, "In the onPause() event");
}
public void onStop()
{
super.onStop();
Log.d(tag, "In the onStop() event");
}
public void onDestroy()
{
super.onDestroy();
Log.d(tag, "In the onDestroy() event");
}
}
برنامه را ذخیره کنید.
برای اجرای برنامه کلید F11 را فشار دهید.
زمانی که برنامه برای اولین بار اجرا می شود در پنچره LogCat چیزی شبیه زیر مشاهده می کنید.
زمانی که دکمه Back در Android Emulator کلیک کنید. موارد زیر در logCat چاپ می شود.
کلید Home را چند ثانیه نگه دارید تا activity های اجرا به شما نمایش داده شوند
در logCat مواردزیر چاپ می شود
دکمهphone را فشار دهید activity به حالت background می رود یعنی برنامه هنوز در حافظه می باشد . در logCAt موارد زیر چاپ می شود.
نکته اینجاست که رویداد onDestroy() اجرا نشد مشخص می کند که هنوز برنامه در حافظه می باشد.
دوباره به برنامه برگردید.
onRestart() اجرا می شود و به دنبال آن onStart() و onResume() اجرا می شوند.
همان طور که در این مثال ساده دیدید زمانی که بر روی دکمه Back را زدیم activity از بین می رود destroyed می شود
توضیحات
همان طور که در این مثال مشاهده کردید زمانی که دکمهback را می زنیم activity destroyed می شود.
از اینرو وضیعت activity جاری را از دست خواهیم داد بنابراین شما باید کد های را به برنامه اضافه کنید که از وضعیت جاری activity را نگه داری کند.(در فصل سوم شرح می دهیم.)در این جا نکته ای اصلی متد onpuse() می باشد که د ر دو حالت رخ می دهد. زمانی که دکمه back را فشا ر می دهیم آن به حات destroyed می شود. و زمانی که آن در حالت Backgrond می باشد.
زمانی که یک activity اجرا می شود متدهای onStart()و onResume() همیشه اجرا می شود.
صرف نظر ا اینکه یک activity تازه ایجاد شده یا یک activity در background بوده و حال اجرا شده است در هردو حالت این متد ها اجرا میشوند.
وزمانی که یک activity برای اولین بار اجرا می شود متد OnCreate() فرا خوانی می شود.
شما از مثال قبل می توانید موارد زیر را استنتاج کنید:
- متد onCreate() زمانی که می خواهید یک نمونه از یک شی object در برنامه ایجاد و استفاده کنید شی مورد نظر را در این متد استفاده کنید
- متد onResume() برای اجرای هر سرویس و کد دلخواهی که شما نیاز دارید اجرا بشود زمانی که activity در حالت foreground می باشد استفاد می شود.
- متد Onpuse() برای Stop کردن هر سرویس و کد دلخواهی که شما نیاز ندارید اجرا شود, زمانی که activity در حالت foreground می باشد استفاده می شود.
- onDrstroyed() برای آزاد کردن منابع قبل از اینکه activity() از بین برود استفاده می شود.