MainActivity.java – अब यदि हम हमारे पिछले Example के Code Files को देखें तो कोई भी Android App पूरी तरह से MVC Pattern पर आधारित होता है, जिसके अन्तर्गत Application के Visual Logic यानी दिखाई देने वाले Part को Program Logic व Data Storage से पूरी तरह से अलग-अलग रखा जाता है, ताकि तीनों को स्वतंत्र रूप से Develop व Maintain किया जा सके। Visual Logic से सम्बंधित Files को View, Program Logic से सम्बंधित Files को Controller व Data Storage से सम्बंधित Files को Model के नाम से Represent किया जाता है।
किसी भी Android App में जब भी कोई Activity File Create किया जाता है, तो हमेंशा दो Files Create होती हैं:
- Activity को Control करने से सम्बंधित .java File जैसे कि java और
- Activity के Visual Part को Represent करने से सम्बंधित .xml File जैसे कि xml
इसीलिए MainActivity.java नाम की जो Controller File के साथ ही activity_main.xml नाम की View File भी Create हो जाती है, जो कि Activity की First Screen के Layout को Define करती है।
जब हम नया Android App Create करते हैं, तक Default रूप से MainActivity.java नाम की जो Java File Create होती है, उसमें निम्न Codes लिखे होते हैं:
package com.bccfalna.myapp; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } }
किसी भी Java Application की सभी Files एक निश्चित Directory Structure को Follow करती हैं और इस Directory Structure की Root Directory को Package के नाम से जाना जाता है। Package का जो URI (Uniform Resource Locator) होता है, उससे ही हमारे Application को किसी भी अन्य Application से अलग Uniquely Identify किया जाना सम्भव हो पाता है।
इसीलिए हमारे Android App से सम्बंधित जितनी भी Java Files Create होती हैं, वे सभी एक Package के अन्दर ही Stored रहती हैं, जिसे हम Package Name के रूप में जानते हैं और अपनी प्रत्येक Java File की First Line में package Keyword के साथ Specify करते हैं। जैसाकि Current Android App में निम्न package Statement द्वारा किया गया है:
package com.bccfalna.myapp;
चूंकि हमारे Android App से सम्बंधित सभी Java Files को ठीक से Manage किया जा सके, इसीलिए नया Android App Create करते समय सबसे पहली Screen पर निम्नानुसार Android App का नाम Specify करने के साथ ही Automatically हमारे Android App से सम्बंधित Package Name भी तय हो जाता है जो कि पूरे Android App की सभी Java Files के लिए Common रूप से Use होता रहता है:
Activity मूलत: Java की एक Base Class है जो कि हमारे Android App के Visual व Interactive Part को Define व Control करने से सम्बंधित जरूरतों को पूरा करता है। सरलतम शब्दों में कहें तो Activity किसी Visual Basic Application के Form की तरह है, जिसके माध्यम से User हमारे Android App के साथ Interact करता है।
Activity Create करने से सम्बंधित सम्पूर्ण Functionalities को Java की Activity Class में Specify किया गया है, जो कि Activity Package में उपलब्ध है और कोई भी Activity तभी Create की जा सकती है, जबकि इस Activity Class से सम्बंधित Package को Current Java File में Import किया गया हो। इसीलिए MainActivity.java Class File में अगले Statement के माध्यम से निम्नानुसार Activity Create करने से सम्बंधित app Package की AppCompatActivity Class को Import किया गया है:
import android.support.v7.app.AppCompatActivity;
इस Import Statement द्वारा Activity Class के स्थान पर AppCompatActivity Class को इसलिए Import किया गया है ताकि जिस Target Android Platform के लिए हम हमारे Current Android App को Create कर रहे हैं, यदि इस App को उस Target Android Platform से पहले या बाद के Android Version पर भी Install किया जाए, तो उस अवांछित Android Platform वाले Android Device का Android System भी हमारे इस Android App को Compatible Mode में Run कर सके।
ये Compatible Mode वाला Import Statement इसलिए Create हुआ है क्योंकि हमने Android Studio के माध्यम से नया Android App Create करते समय निम्न चित्र में दर्शाए अनुसार Backwards Compatibility (AppCompat) Checkbox को Checked रखा था:
यदि हम इस Option को निम्न चित्रानुसार Unchecked कर देते:
तो Android App Create होने के बाद करते, तो इस तरह से Create होने वाली MainActivity.java File में Auto Generated Code निम्नानुसार होते:
package com.bccfalna.myapp; import android.app.Activity; import android.os.Bundle; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } }
जिसमें हम देख सकते हैं कि इस बार AppCompatActivity के स्थान पर Activity Class Import हुआ है।
इस Class के अलावा निम्न Statement के माध्यम से android.os Package से Bundle नाम की एक और Class को Import किया गया है:
import android.os.Bundle;
इस Class में उन Functionalities को Define किया गया है, जिनके माध्यम से एक Activity से दूसरी Activity के बीच Data Pass किया जाता है अथवा App के Current State से सम्बंधित Data को Saved रखा जाता है। उदाहरण के लिए जब हमारा Android App Run हो रहा होता है, उसी दौरान कोई Phone Call आ जाने की वजह से हमारे Current Android App की जो State होती है, उससे सम्बंधित सभी Data को Bundle Class द्वारा ही Background में Save किया जाता है, ताकि जब Phone Call Disconnect होने के बाद User फिर से हमारे Android App पर आए, तो उसे वह उसी स्थिति में मिले, जिसमें Phone Call आने से पहले था।
यदि हम सरलतम शब्दों में कहें तो सम्पूर्ण Android Development System सिर्फ एक Framework है जहां हर Android App उस निश्चित Framework पर आधारित ठीक वैसा ही Java Application है, जैसा Java Applets हुआ करते थे।
यानी जिस तरह से हम Java Applets Develop करने के लिए Applet नाम की Class को Derive करते थे और उसके कुछ निश्चित Methods (init, start, stop, destroy, update, paint and repaint) को Override करते थे, ठीक उसी तरह से Android App Develop करने के लिए हमें Activity या AppCompatActivity Class को Derive करना होता है और उसके कुछ निश्चित Methods (onCreate, onStart, onRestart, onResume, onPause, onStop and onDestroy) को Override करना होता है। फिर जिस तरह से Java Applet, Underlying JVM पर एक निश्चित Lifecycle के अनुसार Run होता था, उसी तरह से Android App भी Underlying Android JVM पर अपनी Lifecycle के अनुसार Run है।
इसीलिए जब नया Activity Create होता है, तो सभी जरूरी Packages Import करने के बाद MainActivity Class Create होता है और निम्न Statement के माध्यम से Automatically Activity या AppCompatActivity Class से Inherit हो जाता है:
public class MainActivity extends Activity {
चूंकि Activity Class किसी Activity की सम्पूर्ण Lifecycle से सम्बंधित विभिन्न Methods को Hold करता है, इसलिए MainActivity Class के Activity Class से Derive होने के कारण Activity Class के सभी Members (onCreate, onStart, onRestart, onResume, onPause, onStop and onDestroy), MainActivity Class में Inherit हो जाते हैं।
परिणामस्वरूप MainActivity की विभिन्न स्थितियों को Control करने के लिए हमें केवल इन Methods को ही Implement करना होता है और क्योंकि MainActivity किसी भी Android App की First Screen से सम्बंधित होता है, इसीलिए First Screen को Create करने के लिए Automatically निम्नानुसार onCreate() Method Implement हो जाता है:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); }
इस Code में सबसे पहले लिखा गया @Override एक Annotation है, जो केवल इसलिए लगाया जाता है, ताकि हमारा Android Compiler, Current Android App को Compile करने से पहले इस बात को निश्चित कर ले कि onCreate() Method का Signature (Output Type, Method Name, Number of Parameters and Types of Parameters) Exactly वैसे ही हैं या नहीं जैसे उन्हें उस Activity Class में Specify किया गया है, जिससे MainActivity Class Derived हुई है।
इस onCreate() Method के Signature व Super Constructor Statement को हरेक Android App की किसी भी Activity में Exactly इसी तरह से Specify किया जाता है। यानी किसी भी Activity में onCreate() Method Exactly निम्नानुसार ही होता है:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Other Code }
इस onCreate() Method की अन्तिम Line में setContentView() Method को Call किया गया है और यही वह Method है, जो इस बात को निश्चित करता है कि Current Activity के लिए View के रूप में कौनसा Layout Use होगा, जो कि User को User Interface Screen के रूप में दिखाई देगा।
हम जो भी Android App Create करते हैं, Android Framework द्वारा उस Android App के सभी Resources को “R” नाम की एक Class द्वारा Represent किया जाता है और हमारे Current Android App से सम्बंधित सभी Resources अगले चित्र में दर्शाए अनुसार “res” नाम के Folder में रहते हैं, जिन्हें इस R नाम की Class द्वारा Refer किया जा सकता है:
यानी हमारे Android App के “res” नाम की Directory में जितने भी Resources होते हैं, उन्हें अपने Android App की किसी भी Java File में Refer करने के लिए हमें इसी “R” Class को Use करना होता है और क्योंकि ये R नाम की Class केवल Static Resources को ही Represent करता है, इसलिए इस Class के सभी Members public static होते हैं।
परिणामस्वरूप अपनी जावा Class File में किसी भी Resource को Refer करने के लिए हमें सीधे ही Resource के नाम को Dot Operator का प्रयोग करते हुए Class के नाम के साथ Specify करना होता है। यानी हमें R Class का Object Create करने की जरूरत नहीं होती क्योंकि इस Class के सभी public static Members पूरे Android App के लिए समान रूप से उपलब्ध रहते हैं।
चूंकि हमारे Current Android App की MainActivity.java File से Associated activity_main.xml नाम की View File को First Screen के रूप में Set करना है, जो कि MainActivity के साथ ही Create होकर “res” Directory की “layout” नाम की Sub-Directory Location पर स्थित है और Java File में इसे R.layout.activity_main Statement के माध्यम से Refer किया जा सकता है।
इसीलिए MainActivity.java File के setContentView() Method में निम्नानुसार तरीके से R.layout.activity_main Statement को Parameter की तरह Specify किया गया है, जिसके परिणामस्वरूप जब इस Android App को Run करते हैं, तो activity_main.xml File में Specify किया गया Layout, First Screen के रूप में Display हो जाता है।
चूंकि हमारे Android App की प्रत्येक Layout File एक XML File ही होती है, इसलिए इस setContentView() Method में उस View File के साथ .xml Extension Specify करना जरूरी नहीं होता।
जिस तरह से हमने activity_main.xml File को MainActivity.java File में Refer किया, उसी तरह से हमारे Android App से सम्बंधित अन्य Resources भी Android App की Hierarchy की “res” Directory में ही होते हैं। इसलिए यदि हमें किसी अन्य Resource File को भी Refer करना हो, तब भी हमें यही तरीका Use करना होता है।
उदाहरण के लिए यदि हमें mipmap Folder के ic_launcher File को Refer करना हो, जिस तरह से R.layout द्वारा “/res/layout/” Directory को Represent किया था, उसी तरह R.mipmap द्वारा “/res/mipmap/” Directory को भी Represent कर सकते हैं और R.mipmap.ic_launcher Statement द्वारा ic_launcher File को Refer कर सकते हैं। साथ ही ठीक इसी तरह से “res” की अन्य Directories को भी Represent कर सकते हैं।
ये Article इस वेबसाईट पर Selling हेतु उपलब्ध EBook Android in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी है, तो निश्चित रूप से ये EBook भी आपके लिए काफी उपयोगी साबित होगी।
Android in Hindi | Page: 628 | Format: PDF