مترجم: حبیب الله علیخانی
منبع:راسخون
منبع:راسخون
این بخش به اینکه چگونه یک اکتیویتی اجرا می شود، توجه می کند. برای ایجاد یک اکتیویتی، یک کلاس جاوا که از کلاس پایه ارث بری می کند، ایجاد کنید:
setContentView(R.layout.main);
هر اکتیویتی که شما در اپلیکیشن خودتان دارید باید در فایل AndroidManifest.xml تعریف شود، مانند زیر:
onCreate(): زمانیکه یک اکتیویتی اولین بار ایجاد می شود، فراخوانی می شود.
onStart():زمانیکه زمانیکه یک اکتیویتی برای کاربر قابل مشاهده می شود، فراخوانی می شود.
onResume():زمانیکه یک اکتیویتی با کاربر شروع به تعامل می کند، فراخوانی می شود.
onPause():زمانیکه اکتیویتی جاری pause(به صورت موقتی متوقف) شده و اکتیویتی قبلی resume (از سرگیری) می شود، فراخوانی می شود.
onStop(): زمانیکه اکتیویتی دیگر برای کاربرقابل مشاهده نیست، فراخوانی نمی شود.
onDestroy(): قبل از اینکه یک اکتیویتی توسط سیستم نابود می شود، فراخوانی می شود(چه به صورت دستی و چه برای آزادسازی حافظه).
onRestart(): زمانیکه اکتیویتی متوقف می شود و دوباره راه اندازی می شود، فراخوانی می شود.
به طور پیشفرض، اکتیویتی ای که برای شما ایجاد می شود، شامل رویداد onCreate() می شود.
بهترین روش برای یادگیری مراحل مختلف اکتیویتی این است که یک پروژه ایجاد کنید و رویدادهای مختلفی را پیاده سازی(implement) کنید، و سپس در معرض تعامل مختلف کاربر قرار دهید.
2- در فایل Activity101Activity.java دستورات زیر را وارد کنید:
4- زمانیکه اکتیویتی اولین بار اجرا می شود، باید یک سری چیزها مانند زیر در پنجره ی LigCat خواهید دید. اگر این پنجره فعال نبود، این پنجره را از طریق زیر فعال کنید:
مطالب زیر را می بینید:
5- اگر دکمه ی back را در شبیه ساز اندروید را کلیک کنیم، مطلب زیر چاپ می شود:
6-
7- دکمه ی Home را کلیک کنید و آن را نگه دارید و سپس آیکن Activities را کلیک کنید و آنرا اجرا کنید:
و مطالب زیر را می بینید:
8- دکمه ی Phone (شماره گیر تلفن) را در شبیه ساز اندروید کلیک کنید، به همین علت اکتیویتی به background قرار می گیرد. سپس خروجی را در پنجره ی LogCat می بینید:
9- توجه کنید که رویداد onDestroy() فراخوانی نشده، نشان می دهد که اکتیویتی هنوز در حافظه وجود دارد. با کلیک کردن دکمه ی بازگشت(Back) از شماره گیر تلفن خارج شوید. اکنون اکتیویتی دوباره قابل رویت می شود. خروجی را در پنجره ی LogCat می بینید:
رویداد onRestart() خارج شد و توسط متد های onStart() و onResume() دنبال شد.
چگونه کار می کند:
زمانیکه یک اکتیویتی شروع شود، متدهای onStart() و onResume() همیشه فراخوانی می شود. صرف نظر از اینکه اکتیویتی از پس زمینه باز گشت یا به تازگی ایجاد شد. هنگامیکه یک فعالیت برای بار اول ایجاد می شود، متد onCreate() فراخوانی می شود.
از مثال قبلی، شما می توانید دستورالعمل های زیر را استخراج کنید:
از متد onCreate() می توانید برای ایجاد یا نمونه سازی اشیائی که در اپلیکیشن تان بکارمی برید، استفاده کنید.
از متد onResume()هنگامیکه اکتیویتی تان در پس زمینه است، برای شروع هر گونه سرویس یا کدی که نیاز به اجرا دارد استفاده می شود.
از متد onpause()هنگامیکه اکتیویتی تان در پس زمینه است، برای توقف هر گونه سرویس یا کدی که نیاز به اجرا دارد استفاده می شود.
از متد onDestroy() برای آزاد سازی منابع قبل از اینکه اکتیویتی تان از بین رود، استفاده می شود.
توجه: اگر یک اپلیکیشن فقط یک اکتیویتی داشته باشد و آن اکتیویتی کشته شود، اپلیکیشن هنوز در حافظه در حال اجرا است.
برای مثال زمانیکه شما بخواهید به منظور سفارشی کردن اپلیکیشن تان برای نمایش pop-up، برای هشدار کاربران در مورد برخی از اقداماتی که آنها می خواهند انجام دهند. در این مورد، نمایش اکتیویتی به عنوان محاوره بهترین روش برای جلب توجه آنها است. برای بکاربردن تم محاوره ای در یک اپلیکیشن، به سادگی می توان با اضافه کردن صفت android: theme در فایل AndroidManifest.xml عنصر <Activity> را می توان تغییر دهید:
android:theme=”@android:style/Theme.Dialog”>
اجرای آن به صورت زیر است:
برای این کار از متد requestWindowFeature() استفاده کنید و به آن ثابت Window.FEATURE_NO_TITLE را پاس دهید. و کدهای زیر را اضافه کنید. مانند زیر:
import android.view.Window;
requestWindowFeature(Window.FEATURE_NO_TITLE);
خروجی آن به شکل زیر می باشد:
استفاده از مطالب این مقاله با ذکر منبع راسخون بلامانع است.
package net.rasekhoon.raeesiyan;
import android.app.Activity;
import android.os.Bundle;
public class Activity101Activity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
این کلاس اکتیویتی کامپوننت UI خودش را با استفاده از فایل XML لود می کند که این فایل XML در دایرکتوری res/layout تعریف شده است. در این مثال، شما باید UI را از فایل main.xml لود کنید:import android.app.Activity;
import android.os.Bundle;
public class Activity101Activity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
setContentView(R.layout.main);
هر اکتیویتی که شما در اپلیکیشن خودتان دارید باید در فایل AndroidManifest.xml تعریف شود، مانند زیر:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="net.rasekhoon.raeesiyan"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="8" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:name=".Activity101Activity"
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 یک سری رویداد را تعریف می کند که چرخه ی حیات (Life cycle) یک اکتیویتی را کنترل می کند. کلاس Activity رویداد های زیر را تعریف می کند:<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="net.rasekhoon.raeesiyan"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="8" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:name=".Activity101Activity"
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>
onCreate(): زمانیکه یک اکتیویتی اولین بار ایجاد می شود، فراخوانی می شود.
onStart():زمانیکه زمانیکه یک اکتیویتی برای کاربر قابل مشاهده می شود، فراخوانی می شود.
onResume():زمانیکه یک اکتیویتی با کاربر شروع به تعامل می کند، فراخوانی می شود.
onPause():زمانیکه اکتیویتی جاری pause(به صورت موقتی متوقف) شده و اکتیویتی قبلی resume (از سرگیری) می شود، فراخوانی می شود.
onStop(): زمانیکه اکتیویتی دیگر برای کاربرقابل مشاهده نیست، فراخوانی نمی شود.
onDestroy(): قبل از اینکه یک اکتیویتی توسط سیستم نابود می شود، فراخوانی می شود(چه به صورت دستی و چه برای آزادسازی حافظه).
onRestart(): زمانیکه اکتیویتی متوقف می شود و دوباره راه اندازی می شود، فراخوانی می شود.
به طور پیشفرض، اکتیویتی ای که برای شما ایجاد می شود، شامل رویداد onCreate() می شود.
درک چرخه ی حیات(Activity) اکتیویتی
1- یک پروژه ی اندرویدی در ایکلیپس به نام Activity101 ایجاد کنید.2- در فایل Activity101Activity.java دستورات زیر را وارد کنید:
1 package net.rasekhoon.raeesiyan;
2
3 import android.app.Activity;
4 import android.os.Bundle;
5 import android.util.Log;
6
7
8 public class Activity101Activity extends Activity {
9
10 String tag = "Lifecycl";
11
12
13 /** Called when the activity is first created. */
14 @Override
15 public void onCreate(Bundle savedInstanceState) {
16 super.onCreate(savedInstanceState);
17 setContentView(R.layout.main);
18 Log.d(tag, "In the onCreate() event");
19 }
20
21
22 @Override
23 public void onStart()
24 {
25 super.onStart();
26 Log.d(tag, "In the onStart() event");
27 }
28
29
30 @Override
31 public void onRestart()
32 {
33 super.onRestart();
34 Log.d(tag, "In the onRestart() event");
35 }
36
37
38 @Override
39 public void onResume()
40 {
41 super.onResume();
42 Log.d(tag, "In the onResume() event");
43 }
44
45
46 @Override
47 public void onPause()
48 {
49 super.onPause();
50 Log.d(tag, "In the onPause() event");
51 }
52
53
54 @Override
55 public void onStop()
56 {
57 super.onStop();
58 Log.d(tag, "In the onStop() event");
59 }
60
61
62 @Override
63 public void onDestroy()
64 {
65 super.onDestroy();
66 Log.d(tag, "In the onDestroy() event");
67 }
68 }
3- آنرا در شبیه ساز اندروید اجرا کنید.2
3 import android.app.Activity;
4 import android.os.Bundle;
5 import android.util.Log;
6
7
8 public class Activity101Activity extends Activity {
9
10 String tag = "Lifecycl";
11
12
13 /** Called when the activity is first created. */
14 @Override
15 public void onCreate(Bundle savedInstanceState) {
16 super.onCreate(savedInstanceState);
17 setContentView(R.layout.main);
18 Log.d(tag, "In the onCreate() event");
19 }
20
21
22 @Override
23 public void onStart()
24 {
25 super.onStart();
26 Log.d(tag, "In the onStart() event");
27 }
28
29
30 @Override
31 public void onRestart()
32 {
33 super.onRestart();
34 Log.d(tag, "In the onRestart() event");
35 }
36
37
38 @Override
39 public void onResume()
40 {
41 super.onResume();
42 Log.d(tag, "In the onResume() event");
43 }
44
45
46 @Override
47 public void onPause()
48 {
49 super.onPause();
50 Log.d(tag, "In the onPause() event");
51 }
52
53
54 @Override
55 public void onStop()
56 {
57 super.onStop();
58 Log.d(tag, "In the onStop() event");
59 }
60
61
62 @Override
63 public void onDestroy()
64 {
65 super.onDestroy();
66 Log.d(tag, "In the onDestroy() event");
67 }
68 }
11-16 06:25:59.396: D/Lifecycle(559): In the onCreate() event
11-16 06:25:59.396: D/Lifecycle(559): In the onStart() event
11-16 06:25:59.396: D/Lifecycle(559): In the onResume() event
11-16 06:25:59.396: D/Lifecycle(559): In the onStart() event
11-16 06:25:59.396: D/Lifecycle(559): In the onResume() event
6-
11-16 06:29:26.665: D/Lifecycle(559): In the onPause() event
11-16 06:29:28.465: D/Lifecycle(559): In the onStop() event
11-16 06:29:28.465: D/Lifecycle(559): In the onDestroy() event
11-16 06:29:28.465: D/Lifecycle(559): In the onStop() event
11-16 06:29:28.465: D/Lifecycle(559): In the onDestroy() event
و مطالب زیر را می بینید:
11-16 06:31:08.905: D/Lifecycle(559): In the onCreate() event
11-16 06:31:08.905: D/Lifecycle(559): In the onStart() event
11-16 06:31:08.925: D/Lifecycle(559): In the onResume() event
11-16 06:31:08.905: D/Lifecycle(559): In the onStart() event
11-16 06:31:08.925: D/Lifecycle(559): In the onResume() event
11-16 06:32:00.585: D/Lifecycle(559): In the onPause() event
11-16 06:32:05.015: D/Lifecycle(559): In the onStop() event
11-16 06:32:05.015: D/Lifecycle(559): In the onStop() event
11-16 06:32:50.515: D/Lifecycle(559): In the onRestart() event
11-16 06:32:50.515: D/Lifecycle(559): In the onStart() event
11-16 06:32:50.515: D/Lifecycle(559): In the onResume() event
11-16 06:32:50.515: D/Lifecycle(559): In the onStart() event
11-16 06:32:50.515: D/Lifecycle(559): In the onResume() event
زمانیکه یک اکتیویتی شروع شود، متدهای onStart() و onResume() همیشه فراخوانی می شود. صرف نظر از اینکه اکتیویتی از پس زمینه باز گشت یا به تازگی ایجاد شد. هنگامیکه یک فعالیت برای بار اول ایجاد می شود، متد onCreate() فراخوانی می شود.
از مثال قبلی، شما می توانید دستورالعمل های زیر را استخراج کنید:
از متد onCreate() می توانید برای ایجاد یا نمونه سازی اشیائی که در اپلیکیشن تان بکارمی برید، استفاده کنید.
از متد onResume()هنگامیکه اکتیویتی تان در پس زمینه است، برای شروع هر گونه سرویس یا کدی که نیاز به اجرا دارد استفاده می شود.
از متد onpause()هنگامیکه اکتیویتی تان در پس زمینه است، برای توقف هر گونه سرویس یا کدی که نیاز به اجرا دارد استفاده می شود.
از متد onDestroy() برای آزاد سازی منابع قبل از اینکه اکتیویتی تان از بین رود، استفاده می شود.
توجه: اگر یک اپلیکیشن فقط یک اکتیویتی داشته باشد و آن اکتیویتی کشته شود، اپلیکیشن هنوز در حافظه در حال اجرا است.
استفاده از styleها(سبک) و تم ها برای اکتیویتی
به طور پیشفرض، یک اکتیویتی کل صفحه نمایش را اشغال می کند، با این حال، شما می توانید یک تم محاوره برای اپلیکیشن بکار ببرید بطوریکه به عنوان محاوره ی شناور نمایش داده می شود.برای مثال زمانیکه شما بخواهید به منظور سفارشی کردن اپلیکیشن تان برای نمایش pop-up، برای هشدار کاربران در مورد برخی از اقداماتی که آنها می خواهند انجام دهند. در این مورد، نمایش اکتیویتی به عنوان محاوره بهترین روش برای جلب توجه آنها است. برای بکاربردن تم محاوره ای در یک اپلیکیشن، به سادگی می توان با اضافه کردن صفت android: theme در فایل AndroidManifest.xml عنصر <Activity> را می توان تغییر دهید:
android:theme=”@android:style/Theme.Dialog”>
پنهان کردن عنوان اکتیویتی
شما می توانید به صورت دلخواه عنوان یک اکتیویتی را پنهان کنید(مانند زمانی که شما فقط می خواهید وضعیت آپدیت را به کاربر نمایش دهید).برای این کار از متد requestWindowFeature() استفاده کنید و به آن ثابت Window.FEATURE_NO_TITLE را پاس دهید. و کدهای زیر را اضافه کنید. مانند زیر:
import android.view.Window;
requestWindowFeature(Window.FEATURE_NO_TITLE);
/ج