ایجاد فعالیت در اندروید استودیو و چرخه حیات آن در برنامه نویسی اندروید

ایجاد فعالیت در اندروید استودیو | اکتیویتی اندروید | آموزش برنامه نویسی اندروید الکامکو

در این پست از آموزش های برنامه نویسی اندروید می خواهیم شما را با فعالیت اندروید (Android Activity) و نحوه ایجاد اکتیویتی در اندروید استودیو و همچنین چرخه حیات فعالیت در اندروید آشنا کنیم. پس با الکامکو همراه باشید.

فعالیت اندروید چیست و  چه کاربردی در سیستم عامل اندروید دارد؟

فعالیت اندروید که در آموزش برنامه نویسی اندروید با نام اکتیویتی اندروید یا اندروید اکتیویتی (Android Activity) نیز شناخته می شود، نوعی فرایند است که در سیستم عامل اندروید به صورت مرحله ای انجام می شود و دارای چرخه حیات است که همگی دست به دست هم می دهند تا کاربر بتواند هنگام کار با اپلیکیشن از صفحه ای به صفحه ای دیگر برود.

مثلا وقتی کاربر در حال کار با کافه بازار است ولی یدفعه به گوشی وی تماسی هم گرفته می شود؛ در این صورت کاربر باید تماس را پاسخ دهد و از صفحه کافه بازار به صفحه مربوط به تماس می رود و در این بین چرخه حیات فعالیت کار خودش را انجام می دهد تا سیستم عامل بتواند این ارتباطات را پاسخگو باشد.

نحوه ایجاد فعالیت در اندروید استودیو چگونه است؟ 

ما فعالیت جدیدی در اندروید استودیو (Android Studio) ایجاد می کنیم تا فایل XML را برای طراحی کد نویسی UI و java ایجاد کنیم. در زیر مراحل ایجاد فعالیت جدید در Android Studio آمده است:

مرحله ۱ ایجاد فعالیت در اندروید استودیو : ابتدا به مسیر app > res > layout بروید و روی گزینه layout راست کلیک کنید. پس از آن New> Activity را انتخاب کنید. در این قسمت می توانید طبق نیاز خود فعالیت اندرویدی (اکتیویتی اندروید) خود را انتخاب کنید. ولی ما می خواهیم یک فعالیت اندروید جدید ایجاد کنیم پس در اینجا اکتیویتی Blank Activity را مطابق شکل زیر انتخاب کنید.

Create Activity in android studio - ایجاد فعالیت در اندروید استودیو | اکتیویتی اندروید | آموزش برنامه نویسی اندروید الکامکو

مرحله ۲ ایجاد فعالیت در اندروید استودیو : در این مرحله می خواهیم فعالیت اندروید را سفارشی سازی کنیم. برای اینکار نام فعالیت را در قسمت “Activity Name” و نام بسته (نام پکیج اندروید) را در “Package name” وارد کنید و روی دکمه “ّFinish” کلیک کنید.

Customize the Activity - ایجاد فعالیت در اندروید استودیو | اکتیویتی اندروید | آموزش برنامه نویسی اندروید الکامکو

مرحله ۳ ایجاد فعالیت در اندروید استودیو : پس از زدن دکمه  “ّFinish”، فعالیت جدید شما در Layout ایجاد می شود. کد XML شما در “Text” است و خروجی طراحی شما در “Design” نمایش داده می شود.

Blank Activity Output - ایجاد فعالیت در اندروید استودیو | اکتیویتی اندروید | آموزش برنامه نویسی اندروید الکامکو

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

چرخه حیات فعالیت اندروید (Android Activity Lifecycle) یکی از بلوک های اصلی سیستم عامل اندروید است. به عبارت ساده اکتیویتی، صفحه ای در اندروید است که کاربر با آن تعامل دارد. هر فعالیتی در اندروید استودیو دارای هفت چرخه حیات created, started, resumed, paused, stopped, destroyed است. این حالت های مختلف به عنوان چرخهِ زندگیِ Activity شناخته می شوند. به عبارت دیگر می توان گفت فعالیت یک کلاس است که از قبل در برنامه نویسی جاوا نوشته شده است.

لیست فرایند ها در چرخه فعالیت اندروید : 

شرح کوتاهی از هفت فرآیند در چرخه حیات یک فعالت اندروید (Android Activity Lifecycle) عبارتند از:

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

نمودار زیر چرخه فعالیت های اندروید را نشان می دهد:

Activity Lifecycle Diagram - چرخه حیات فعالیت در اندروید استودیو | آموزش برنامه نویسی اندروید الکامکو

انواع مختلف فعالیت های فعالیت های چرخه عمر:

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

لیستی از حالتها یا روش های چرخه حیات فعالیت های اندروید در اندروید استودیو :

(Activity Created: onCreate(Bundle savedInstanceState:

هنگامی که اکتیویتی حافظه را در سیستم عامل بدست می آورد، روش ()onCreate نامیده می شود.

برای استفاده از حالت create،نیاز داریم تا روش(onCreate (Bundle saveInstanceState را لغو کنیم. اکنون این سؤال را در ذهن خواهید داشت که Bundle در اینجا چیه؟ در جواب به این سوال باید بگوییم که Bundle یک شیء مخزن داده است که می تواند هر نوع داده اولیه را ذخیره کند و تا زمانی که برخی از داده ها در آن ذخیره نشوند، این شیء خالی خواهد بود.

  • هنگامی که یک فعالیتی در اندروید برای اولین بار فراخوانی می شود یا راه اندازی می شود، روش (onCreate (Bundle saveInhentState وظیفه ایجاد فعالیت را دارد.
  • هنگامی که جهت گیری فعالیت (به عنوان مثال از افقی به عمودی یا عمودی به افقی) تغییر می کند یا وقتی یک فعالیت به زور توسط سیستم عامل خاتمه می یابد، آنوقت از آن استفاده می شود.
  • بهترین مکان برای قرار دادن کد اولیه است.

()Activity Started: onStart:

بلافاصله پس از ایجاد فعالیت، روش ()onStart فراخوانی می شود. در حالت دیگر، فعالیت با راه اندازی مجدد روش یعنی بعد از توقف فعالیت نیز می تواند شروع شود. بنابراین این بدان معنی است که وقتی کاربر بین برنامه ها جابجا شود، ()onStart توسط سیستم عامل اندروید فراخوانی می شود.

به عنوان مثال ، اگر کاربر از برنامه A استفاده می کرد و سپس یک اعلان می آید و کاربر روی اعلان کلیک می کند و به برنامه B منتقل می شود، در این حالت برنامه A متوقف می شود. و دوباره اگر کاربر دوباره روی آیکن برنامه برنامه A کلیک کند، دوباره برنامه A که متوقف شد شروع می شود.

()Activity Resumed: onResume:

وقتی فعالیت برای کاربر قابل مشاهده است ارتباط برقرار می شود و کاربر می تواند با آن تعامل برقرار کند. این متد در چرخه حیات فعالیت، همیشه بعد از ()onStart فراخوانی می شود و بعد با ()onPause متوقف می شود.

()Activity Paused: onPause:

هنگامی فراخوانی می شود که محتوای فعالیت قابل مشاهده نباشد زیرا کاربر فعالیت قبلی را از سر می گیرد و وقتی کاربر دکمه Home (دکمه اصلی روی دستگاه) را فشار دهد تا مخفی شود.

فعالیت همچنین قبل از Pause شدن توسط فشار دکمه ناوبری Back توسط کاربر متوقف می شود. این فعالیت به همین دلایل متوقف می شود در صورتی که یک اعلان یا گفتگوی دیگری قسمت دیگری از قسمت (بالا یا پایین) فعالیت (صفحه) را پوشش دهد.

به طور مشابه ، اگر صفحه نمایش گوشی در حالت شفاف (transparent) باشد، کاربر می تواند صفحه را مشاهده کند اما نمی تواند با آن تعامل برقرار کند. به عنوان مثال ، اگر تماسی گرفته شود یا نوتیفیکیشنی وارد گوشی شود، کاربر می تواند تماس را قبول کند یا آن را نادیده بگیرد.

()Activity Stopped: onStop:

هنگامی فراخوانی می شود که فعالیت برای کاربر قابل مشاهده نیست زیرا فعالیت دیگری در آن صورت می گیرد.به عنوان مثال ، اگر کاربر روی صفحه ۱ بود و بر روی دکمه ای کلیک کرد، به صفحه ۲ می رود. در این حالت اکتیویتی که محتوای صفحه ۱ را نمایس می داد متوقف می شود.

()Activity Restarted: onRestart:

وقتی کاربر روی صفحه ظاهر می شود یا فعالیتی را که متوقف شده بود از سر گرفته می شود. به عبارت دیگر ، هنگام شروع سیستم عامل، فعالیت برای اولین بار حالت ()onRestart هرگز فراخوانی نمی شود. تنها در مواردی که فعالیت پس از پایان وضعیت از سر گرفته شود، فراخوانی می شود.

()Activity Destroyed: onDestroy:

هنگامی که فعالیت در پس زمینه نیست، فراخوانی می شود. این اتفاق در صورتی می افتد که کاربر دکمه اصلی را فشار دهد و برنامه به پس زمینه سوئیچ کند. کاربر دیگر از آن استفاده نمی کند و در لیست برنامه های اخیر نشان داده می شود. بنابراین در این حالت اگر منابع مورد نیاز سیستم نیاز به استفاده در جایی دیگر داشته باشند ، سیستم عامل می تواند Activity را از بین ببرد.

اگر کاربر دوباره بر روی آیکن برنامه کلیک کند، اکتیویتی را از بین می برد، در این حالت فعالیت دوباره ایجاد می شود و دوباره همان چرخه زندگی را دنبال می کند.

مثالی از چرخه فعالیت اندروید :

در این مثال از مباحثی که در زبان برنامه نویسی جاوا (Java) و اندروید (Android) مطرح می باشد استفاده شده است.

مباحث جاوا استفاده شده در این پروژه : 

Method Overriding, static variable, package, Inheritance, method and class

مباحث اندروید مطرح شده در این پروژه :

ما از کلاس Log استفاده کرده ایم که برای چاپ پیام در Logcat استفاده می شود. یکی از کاربردهای مهم Log در اشکال زدایی است.

شروع برنامه نویسی اندروید در اندروید استودیو :

ابتدا یک پروژه جدید Android ایجاد کنید و فعالیت را HomeActivity نامگذاری کنید. ما پروژه برنامه خود را در اینجا Activity Lifecycle Example نام گذاری کردیم.

ما با استفاده از متد ()getSimpleName متغیر استاتیک String را با نام کلاس زیر تنظیم می کنیم.

در HOME_ACTIVITY_TAG نام متغیر رشته است که نام کلاس HomeActivity را ذخیره می کند.

private static final String HOME_ACTIVITY_TAG = HomeActivity.class.getSimpleName();

اکنون یک روش جدید ایجاد خواهیم کرد که پیام را در Logcat چاپ می کند.

private void showLog(String text){

   Log.d(HOME_ACTIVITY_TAG, text);

}

اکنون از همه روش های چرخه فعالیت در Android استفاده خواهیم کرد و از متد ()showLog که برای چاپ پیام در Logcat ایجاد می کنیم ، استفاده خواهیم کرد.

@Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        showLog("Activity Created");

    }

@Override

protected void onRestart(){

    super.onRestart();//call to restart after onStop

    showLog("Activity restarted");

}

@Override

protected void onStart() {

    super.onStart();//soon be visible

    showLog("Activity started");

}

@Override

protected void onResume() {

    super.onResume();//visible

    showLog("Activity resumed");

}

@Override

protected void onPause() {

    super.onPause();//invisible

    showLog("Activity paused");

}

@Override

protected void onStop() {

    super.onStop();

    showLog("Activity stopped");

}

@Override

protected void onDestroy() {

    super.onDestroy();

    showLog("Activity is being destroyed");

}

تکمیل کد جاوا در HomeActivity.java :

package com.abhiandroid.activitylifecycleexample;

import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;



    public class HomeActivity extends AppCompatActivity {

        private static final String HOME_ACTIVITY_TAG = HomeActivity.class.getSimpleName();


        private void showLog(String text){

            Log.d(HOME_ACTIVITY_TAG, text);

        }

        @Override

        public void onCreate(Bundle savedInstanceState) {

            super.onCreate(savedInstanceState);

            showLog("Activity Created");

        }

        @Override

        protected void onRestart(){

            super.onRestart();//call to restart after onStop

            showLog("Activity restarted");

        }

        @Override

        protected void onStart() {

            super.onStart();//soon be visible

            showLog("Activity started");

        }

        @Override

        protected void onResume() {

            super.onResume();//visible

            showLog("Activity resumed");

        }

        @Override

        protected void onPause() {

            super.onPause();//invisible

            showLog("Activity paused");

        }

        @Override

        protected void onStop() {

            super.onStop();

            showLog("Activity stopped");

        }

        @Override

        protected void onDestroy() {

            super.onDestroy();

            showLog("Activity is being destroyed");

        }

    }

هنگام ایجاد یک اکتیویتی جدید در اندروید باید این موضوع را در فایل AndroidManifest.xml ثبت کنیم. حال سوال این است که چرا باید ثبت کنید؟ این در واقع به این دلیل است که فایل مانیفست دارای اطلاعاتی است که ابتدا سیستم عامل اندروید ان را می خواند. هنگام ثبت نام یک فعالیت، سایر اطلاعات همچنین می تواند در مانیفست مانند Launcher Activity تعریف شود (فعالیتی که باید با کلیک کاربر بر روی آیکن برنامه شروع شود).

در اینجا مثال نوتیفیکیشن در فایل AndroidManifest.xml آورده شده است:

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

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

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

</manifest>

خروجی چرخه حیات اکتیویتی :

هنگامی که برنامه فوق را اجرا می کنید، متوجه می شوید که یک صفحه سفید خالی در Emulator (شبیه ساز اندروید) باز خواهد شد. ممکن است تعجب کنید که صفحه خوش آمد گویی (Hello world screen) به طور پیش فرض در کجا قرار دارد؟ در واقع ما آن را با استفاده از روش ()onCreate حذف کرده ایم. در زیر صفحه سفید خالی است که ظاهر خواهد شد.
خروجی چرخه حیات اکتیویتی در این مثال از آموزش اندروید استودیو الکامکو اکنون به Logcat موجود در Android Monitor بروید: به بالا بروید و به این سه روش توجه کنید که عبارتند از:
Activity Created, Activity started and Activity resumed

Activity Lifecycle Logcat Output oncreate() onstart() onresume()

  • اولین روش ()onCreate هنگام ایجاد فعالیت فراخوانی شد.
  • با شروع فعالیت برای کاربر قابل مشاهده ، روش دوم ()onStart فراخوانی شد.
  • سرانجام روش ()onResume فراخوانی شد و اکتیویتی برای کاربر قابل مشاهده شد و کاربر در این حالت می تواند با برنامه تعامل داشته باشد.

حالا دکمه Back در شبیه ساز Emulator را فشار دهید و از اپلیکیشن خارج شوید.

press back button Activity Lifecycle - ایجاد فعالیت در اندروید استودیو | اکتیویتی اندروید | آموزش برنامه نویسی اندروید الکامکو

دوباره به Logcat بروید و ایندفعه یکم به پایین بروید. خواهید دید که ۳ روش دیگر فراخوانی شده است:
Activity paused, Activity stopped and Activity is being destroyed

Activity Lifecycle Logcat Output onpause() onstop() ondestroy() - الکامکو

بنابراین واضح است که :

  • هنگامی که کاربر فعالیت قبلی خود را از سر گرفت، روش ()onPause فراخوانی شد.
  • هنگامی که فعالیت برای کاربر قابل مشاهده نیست، روش ()onStop فراخوانی شد.
  • آخرین فعالیت ()onDestroy هنگامی که فعالیت در پس زمینه نیست، فراخوانی شد.

نکته مهم: در مثال بالا ()onRestart فراخوانی نمی شود زیرا هیچ شرایطی وجود ندارد که بتوانیم دوباره روش ()onStart را از سر بگیریم.

چرا چرخه حیات اکتیویتی در اندروید اهمیت دارد؟ 

فعالیت مؤلفه اصلی برنامه اندرویدی است، زیرا هر صفحه یک فعالیت است بنابراین برای ایجاد هر برنامه ساده ابتدا باید با فعالیت شروع کنیم. هر روش چرخه عمر برای اجرای مطابق با الزامات بسیار مهم است، با این حال روش ()onCreate همیشه برای اجرای یا نمایش برخی از مطالب روی صفحه مورد نیاز است.

 

commentشما بگید!

شما چه سوالی درباره این موضوع دارید که اینجا مطرح نشده است؟ لطفا تجربیات خودتان را در این زمینه حتما توی کامنت برای ما بنویسید. منتظر نظرات، پیشنهادات و سوالات شما در همین صفحه از سایت آموزش برنامه نویسی الکامکو هستیم…

توجه

مقاله هایی که در سایت به صورت رایگان قرار گرفته است فقط برای مطالعه بیشتر شما کاربران عزیز می باشد. از هرگونه تماس تلفنی با پشتیبانی سایت و سوال در مورد محتوای مقاله ها خودداری شود.

shareاشتراک گذاری این مطلب

shareآخرین مقالات

توجه

مقاله هایی که در سایت به صورت رایگان قرار گرفته است فقط برای مطالعه بیشتر شما کاربران عزیز می باشد. از هرگونه تماس تلفنی با پشتیبانی سایت و سوال در مورد محتوای مقاله ها خودداری شود.

Generic filters
Exact matches only

آخرین مقالات

آموزش های تکمیل شده

توجه

مقاله هایی که در سایت به صورت رایگان قرار گرفته است فقط برای مطالعه بیشتر شما کاربران عزیز می باشد. از هرگونه تماس تلفنی با پشتیبانی سایت و سوال در مورد محتوای مقاله ها خودداری شود.

0 دیدگاه
بازخورد درون خطی
مشاهده همه نظرات