درس ۶-اکتیویتی ها در برنامه نویسی اندروید

در برنامه نویسی اندروید یک اکتیویتی به فعالیت موجود در صفحه ی نمایش گفته میشود که یک رابط کاربری هم دارد. در واقع یک صفحه از اپلیکیشن که باز هست یک اکتیویتی میباشد. اگر قبلا با زبان های برنامه نویسی c یا c++ یا Java کار کرده باشید میدانید که نقطه ی شروع اجرای پروژه های شما تابعی با نام main() هست. اپ های اندرویدی نیز به همین شیوه برای اجرا شدن یک نقطه ی شروع دارند که معمولا یک Activity و از متودی به نام onCreate() میباشد.

زمان اجرا شدن یک اکتیویتی در اندروید یک سری متود ها به ترتیب اجرا میشوند که به آن چرخه ی حیات میگویند و در تصویر زیر مشاهده میکنید : 

 

چرخه ی حیات یک Activity در برنامه نویسی اندروید

تمامی متودهای بالا درون اکتیویتی تعریف شده اند و کافیست override کنید و نیاز به برنامه نویسی توسط شما نیست.اما مهم هست که هر کدام از متودهای بالا را کاملا درک کنید و نحوه و زمان اجرا شدن آنها را یاد بگیرید.

بحث اکتیویتی و چرخه ی حیات آنها درون دوره ی آموزش ویدیویی برنامه نویسی اندروید قرار گرفته است که اگر تمایل به دیدن دوره های آموزشی ویدیویی دارید بهتر است آنرا تهیه کنید.

 

شماره متود و توضیحات آن
1 onCreate()
این اولین متود callback هست و زمانی صدا میشود که اکتیویتی ساخته میشود.
2 onStart()
این متود زمانی اجرا میشود که اکتیویتی در صفحه به نمایش درمی آید.
3 onResume()
این متود زمانی اجرا میشود که به اکتیویتی رها شده دوباره برگردید.
4 onPause()
زمانی که اکتیویتی به صورت موقتی بسته میشود مثلا فرض کنید موقع کار کردن با یک اپ گوشی شما زنگ میزند آن اپ به حالت pause میرود و این متود برای اکتیویتی در جریان به اجرا درمی آید.
5 onStop()
این متود زمانی اجرا میشود که اکتیویتی دیگر روی صفحه نمایش داده نشود.
6 onDestroy()
این متود قبل از اینکه اکتیویتی بصورت کامل از بین برود اجرا میشود.
7 onRestart()
این متود زمانی اجرا میشود که دوباره اکتیویتی اجرا شود.

 

مثال :

این مثال ساده به شما کارکرد چرخه ی حیات اکتیویتی یا Android application activity life cycle را نشان میدهد. 

  1. یک پروژه جدید در محیط Android Studio بسازید و نام آنرا Hello World بگذارید.
  2. اکتیویتی اصلی یا MainActivity را باز کنید و کدهای آنرا به شکل کدهای زیر تغییر بدهید.
  3. برنامه را روی امولاتور اندرویدی اجرا کنید و نتیجه را بررسی کنید.

در زیر کدهای ادیت شده src/com.example.helloworld/MainActivity.java را میبینید که میتوانید آنها را کپی و استفاده کنید. 

این کدها شامل متود های چرخه ی حیات بصورت آماده هست که از کلاس Log.d() برای نمایش لاگ برای هر کدام از آنها استفاده شده است.

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/ قرار گرفته باشد ما در نمونه کد بالا از res/layout/activity_main.xml  استفاده کردیم که به شکل زیر بود :‌

setContentView(R.layout.activity_main);

 هر اپلیکیشن میتوانند به تعداد نامحدودی اکتیویتی داشته باشد که هیچ دخالتی برهم دیگر هم ندارند. همچنین همانطور که در درس های قبلتر هم گفتیم هر اکتیویتی باید درون فایل شناسه AndroidManifest.xml  تعریف شده باشد وگرنه استفاده از آن ممکن نیست و اکتیویتی اصلی یا main برنامه هم باید با <intent-filter> مشخص شود.

یک نمونه از AndroidManifest را در زیر مشاهده میکنید : 

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.tutorialspoint7.myapplication">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

اگر درون intent-filter دو تگ action و category با نام های MAIN و LAUNCHER برای اکتیویتی اصلی تعریف نشوند اپلیکیشن شما اجرا نخواهد شد.

اگر اپلیکیشن نمونه ی بالا را اجرا کنید و در محیط اندروید استودیو قسمت لاگ کت ( Logcat ) را بررسی کنید با کدهای زیر مواجه میشوید :‌

08-23 10:32:07.682 4480-4480/com.example.helloworld D/Android :: The onCreate() event
08-23 10:32:07.683 4480-4480/com.example.helloworld D/Android :: The onStart() event
08-23 10:32:07.685 4480-4480/com.example.helloworld D/Android :: The onResume() event

و طبق تصویر زیر خواهد بود : 

چرخه ی حیات اکتیویتی ها در برنامه نویسی اندروید آموزش


اگر روی امولاتور اندروید دکمه ی قفل صفحه را بزنید بعضی از متودهای چرخه ی حیات اجرا میشود و در نهایت لاگ کت زیر را تولید میکند : 

08-23 10:32:53.230 4480-4480/com.example.helloworld D/Android :: The onPause() event
08-23 10:32:53.294 4480-4480/com.example.helloworld D/Android :: The onStop() event

اگر قفل صفحه ی امولاتور اندرویدی را باز کنید در LogCat خروجی زیر را مشاهده میکنید ‌: 

08-23 10:34:41.390 4480-4480/com.example.helloworld D/Android :: The onStart() event
08-23 10:34:41.392 4480-4480/com.example.helloworld D/Android :: The onResume() event

حال زمانی که داخل اپلیکیشن اجرا شده هستید دکمه ی بازگشت ⏎ را بزنید و میبینید که متودهای جدیدی اجرا میشود و لاگ کت شما از نتایج جدیدی پر میشود :‌

08-23 10:37:24.806 4480-4480/com.example.helloworld D/Android :: The onPause() event
08-23 10:37:25.668 4480-4480/com.example.helloworld D/Android :: The onStop() event
08-23 10:37:25.669 4480-4480/com.example.helloworld D/Android :: The onDestroy() event

 

با مثال بالا یک آزمایشی را انجام دادیم تا علاوه بر آموزش تئوری بصورت عملی داخل اندروید استودیو هم بتوانید عملکرد متودهای چرخه ی حیات اکتیویتی را مشاهده کنید.


محصولات برگزیده مناسب شما