القائمة الرئيسية

الصفحات

9-شرح دورة حياة الـ Activity بالتفصيل +مثال تطبيقي


ذكرنا في الدرس السابق أن الـ Activity  هي عبارة هي عبارة عن الشاشات التي يتم عرضها في أي تطبيق اندرويد يقوم المستخدم بالتعامل معها.
لكل Activity  توجد هناك دورة حياة أي بمعنى هي مجموعة من الاحداث التي تمر بها الـ Activity.
فهمت شيء؟؟
أنا ما فهمت شيء!!!
دعني أوضح لك ..
عندما تقوم ببرمجة تطبيق وتثبيته على أي جهاز اندرويد فهناك حالتين:

1-المستخدم يقوم  باستخدام تطبيقك.
2-المستخدم لا يقوم حاليا باستخدام تطبيقك.




ففي الحالة الأولى عندما يقوم المستخدم باستخدام تطبيقك فإن شاشة تطبيقك تكون ظاهرة للمستخدم ويقوم بالتفاعل معها.
عندما يقوم المستخدم بالخروج من تطبيقك فإن شاشة تطبيقك لا تكون ظاهرة للمستخدم.
وفي جميع الحالات فان الـ Activity  منذ ظهورها على الشاشة إلى اختفائها تمر بدورة حياة Life Cycle ومجموعة من الاحداث تمر عليها.



ولفهم اكثر دورة حياة الـ Activity  من خلال الخطوات التالية:

1-نفتح بيئة اندرويد استديو ونقوم بإنشاء مشروع جديد ونسميه ActivitiesLifeCycle  إذا كنت لاتعرف كيفية إنشاء مشروع جديد اقراء هذا الدرس.

2-في الكلاس MainActivity  نقوم بعمل Override  لدوال دورة حياة الـActivity. 

3-نقوم بطباعة رسالة  في LogCatعند تنفيذ الدالة وذلك باستخدام الكلاس Log واستدعاء الدالة d ونقوم بتمرير لها  2بارميتر من نوع String.

1-الأول هو عبارة عن تاغ أو وسم وذلك لفلترة الرسائل المعروضة في LogCat
2-الرسالة المراد عرضها.
كما في الكود ادناه:

Log.d(Tag,"message");


وسيكون شكل الكود بعد تنفيذ الخطوات 2 و 3

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
package com.blogspot.muteealjabri.activitylifecycle;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;

public class MainActivity extends AppCompatActivity {

    private static final String TAG="mutee";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Log.d(TAG,"onCreate");
    }
    @Override
    protected void onStart(){
        super.onStart();

        Log.d(TAG,"onStart");
    }
    @Override
    protected void onResume(){
        super.onResume();

        Log.d(TAG,"onResume");
    }

    @Override
    protected void onPause(){
        super.onPause();

        Log.d(TAG,"onPause");

    }
    @Override
    protected void onStop(){
        super.onStop();

        Log.d(TAG,"onStop");
    }
    @Override
    protected void onRestart(){
        super.onRestart();

        Log.d(TAG,"onRestart");
    }
    protected void onDestroy(){
        super.onDestroy();

        Log.d(TAG,"onDestroy");
    }

}


 بعد ذلك م نقوم بتشغيل بترجمة وتشغيل هذا المشروع ثم نلاحظ التبويب  الخاص ب LogCat
 وسنلاحظ ما يلي:

1-عند ترجمة و تشغيل البرنامج وظهوره لأول مرة على الشاشة فإنه يتم استدعاء وتنفيذ الدوال التالية:
-()onCreate:تتنفذ عند إنشاء الـ .Activity
-()onStart:تتنفذ قبل ظهور الشاشة للمستخدم.
-()onResume:تتنفذ عندما تظهر الشاشة للمستخدم.

كما في الشكل ادناه


2-عند الضغط على زر الرجوع في الهاتف  يتم استدعاء وتنفيذ الدوال التالية كما:
-()onPause :ويتم إستدعائها قبل إختفاء الـActivity  من شاشة الهاتف.
-()onStop: ويتم استدعائها عند اختفاء الـActivity  لكن تبقى موجودة في الذاكرة RAM.
-()onDestroy:ويتم استدعائها وتنفيذ هذه الدالة عند إنهاء الـ Activity  ومسحها من الذاكرة RAM.





3- نقوم بفتح التطبيق مرة أخرى من قائمة التطبيقات ليتم استدعاء الدوال مرة أخرى كمايلي:



4- عند الضغط على زر Home Button  يتم استدعاء التالية كما يلي:



لاحظنا هنا لم يتم استدعاء دالة onDestroy  وهذا يعني انه موجودة في الذاكرة
أي عند الضغط على زر Home Button  فإنه يتم إخفاء الـ Activity  وتبقى موجودة بالذاكرة RAM .

5-لكن عند العودة مرة أخرى الى الـ Activity  بعد الضغط على زر HomeButton فإنه يتم استدعاء وتنفيذ الدوال التالية:


-لا يتم استدعاء دالة()onCreateمرة أخرى.
-يتم استدعاء دالة()onRestart وهي دالة تتنفذ عند فتح الـ Activity  مرة أخرى بشرط أن تكون الـ Activity  موجودة في الذاكرة RAM  ولم يتم مسحها.
-استدعاء دالة ()onResume  وهي دالة تتنفذ عندما تكون الـ Activity  ظاهرة للمستخدم.

ملاحظة:
عند تغيير اتجاه دوران الشاشة يتم تنفيذ دوال دورة حياة الـ Activity  مرة اخرى.

وهنا نكون قد انتهينا من شرح هذا الدرس .. ولتحميل هذا الدرس يرجى الضغط هنا