Android App – The Basic Architecture
Android App – The Basic
Architecture
जब हम Desktop
Application Develop करते है , तब हमारे Application पर हमारा पूरा Control होता है , जिसके अंतर्गत हम
हमारी जरुरत के अनुसार कभी भी अपने Application
के Main window को Launch कर सकते है व उसमें किसी Specific Child Window जैसे
की Dialog Box को Open कर सकते है |
यानी एक Desktop
Application Develop करते समय हमारे Application के विभन्न Aspects पर हमारा पूरा Control होता है , जिसकी विभन्न जरूरतों को Operating System द्वारा किया जाता है |
लेकिन हमारे Application
का किसी भी अन्य Application के साथ Directly
कोई भी Interaction नहीं होता , हालांकि अन्य Applications
की विभन्न Requirements को भी पूरा कर रहा
होता है |
जबकि यदि हमें
हमारे Application
Program द्वारा किसी अन्य Application के साथ Interact
करना हो तो ये सुविधा हमें एक Separate API (Application
Programming Interface) जैसे की Java Database Connectivity (JDBC) या किसी अन्य Framework द्वारा प्राप्त होती है |
Android Applications भी कुछ इसी तरह से काम करता है ,लेकिन Android Applications को थोड़ा अलग तरीके से Package किया जाता है जो की जिस Phone पर इन Applications
को Run किया जाए , उन Phone Devices पर किसी भी प्रकार का Software Crash जैसा issue
पैदा न हो |
यानी प्रत्येक Android
Application Crash – Registrant हो , इसलिए उन्हें एक Specific तरीके
से Package किया जाता है , जो की निम्नानुसार विभन्न important Parts होते है |
Views
User Screen पर जो कुछ भी देखता है , उसे ही User Interface (UI) कहते है और user के सामने कौनसा User
Interface दिखाई देगा , इसे Set करने की
जिम्मेदारी Activity की होती है |
किसी भी Android
App में User Interface मूल रूप से दो Sub
– Components के बने होते है , जिन्हें Views व
Layouts या View Groups के नाम से जाना
जाता है |
किसी Android
App के User Interface (UI) Elements जैसे की Button
, Label , TextBox , Radio Button , Checkbox आदि को views कहते है जो की Android App का User Interface
Create करते है , ताकि User उस Android
App से Interact कर सके |
जबकि इन View
Elements को Hold करने के लिए Container
की तरह काम करने वाले अन्य Container Views को
Layouts अथवा View Groups कहते है ,
क्योंकि एक User Interface , Multiple UI View Elements का Group
होता है इसलिए इन Container Views को View Group भी कहा जाता है जो कि Group of views को Represent करता है |
चुंकि Layout
, अन्य UI View Elements का Container होते है , इसलिए ये मूल रूप से किसी Android app के Screen
पर देखाई देने वाले View Elements के Pattern
को Specify करते हुए इस बात को तय करते है कि
विभन्न User Interface Elements Screen पर Visually
(Height , Width , Position , etc …) किस तरह से दिखाई देंगें |
उदाहरण के लिए Linear
Layout Use करने पर इसके अंदर Render होने
वाले विभन्न Use Interface Elements Vertically (एक UI
Elements के ऊपर या निचे दूसरा ) अथवा Horizontally
(एक UI Element के पहले या बाद में दूसरा ) Stack
होते है जबकि Relative Layout Use करने पर
इसके अंदर Render होने वाले विभन्न User Interface
Elements अपने Parent अथवा Sibling UI Element के सन्दर्भ में Render होते है |
Android Application के User Interface को XML Markups के माध्यम से ठीक उसी तरह से Define किया जाता है ,
जिस तरह से हम किसी Web page पर किसी Registration
Form को HTML के <form> Markup द्वरा Define करते है |
यानी जिस तरह से
एक Web
Browser का HTML Parser हमारे HTML
Webpage के <form> Elements में Specify
किए गए <button> , <input> , <label> आदि HTML Markups को Button , TextBox व Label जैसे GUI Controls के
रूप में Render करता है , ठीक उसी तरह से एक Android
App के User Interface को हम जिन XML
Markups का प्रयोग करते हुए Define करते
है , Android App का
XML Parser उन XML Markups के आधार पर Android
Device की Screen पर User Interface
Controls को Display कर देता है |
उदाहरण के लिए जब
भी हम Relative
Layout पर आधारित कोई नई Activity
Create करते है , उस Activity के साथ ही Automatically
एक Layout view भी Create हो जाता है और उस Automatically create होने वाले view
में Default रूप से निम्न Markups होते है |
Create होने
वाली View File मूलतः एक XML file होती
है इसलिए किसी भी XML File की तरह ही इसकी शुरुवात भी
निम्नानुसार <?xml/> Element से होती है |
<?xml version=”1.0”
encoding=”utf-8”?>
जो Android
Framework के XML Parser को इस बात की जानकारी
देता है की Current File एक XML File है
जो की Android App के Visual Part यानी
GUI Part को Control करता है |
साथ ही किसी भी Framework
की तरह ही Android Framework में भी Files
का Naming Convention महत्वपूर्ण Role Play करता है |
इसलिए
इस File
का नाम इसके साथ Create होने वाली Activity
File के नाम से सम्बंधित होता है |
उदाहरण के लिए जब
MainActivity.java
नाम का Activity File Create होता है , तो
उसके साथ Create होने वाले Layout View File का नाम activity_main.xml होता है |
इसी
तरह से यदि हम हमारे Current Android App में Second
Activity नाम की एक और Activity Create करें ,
तो Create होने वाली SecondActivity.java
File के साथ जो Layout View File Create होता
है , उसका नाम activity_second.xml होता है |
हालांकि यदि हम
चाहें तो Android Framework के इस Naming
Convention को Follow न करते हुए इन नामों को
न बदलते हुए Android Framework के Naming
Convention को ज्यों का
त्यों Follow करें क्योंकि जब हम इन Naming
Conventions को ज्यों का त्यों Follow करते है
, तो Android Development के लिए हम जिस किसी भी IDE को Use कर रहें होते है , वह IDE हमारे लिए काफी Android Codes Automatically Generate कर देता है , जिससे हमारे App Development की Speed
काफी बढ़ जाती है |
चुंकि Android
App का Layout व GUI Part , XML Markup आधारित Language द्वारा Create किया जाता है , जिसे Android
Framework का XML Parser Parse करता है ,
इसलिए हम जब कोई नया Activity Create करते है , उसके साथ Create
होने वाले Layout View में उपरोक्तानुसार Specified
<Relativelayout../> व <TextView../> नाम के दो Elements होते है जैसाकि हमने पहले बताया
की Android App के User Interface मूलतः
दो प्रकार के Sub Components Views व Layout या Groupviews के बने होते है |
अतः इस Automatically
Generate होने वाले XML Code में <Relativelayout../>
Element के प्रकार का Layout अथवा Group
Views है , जो की <Text View …/> जैसे
कई View Elements को एक Group के रूप
में Contain करते हुए Create होने वाले
Android App के User Interface को Organize
करता है |
अन्य शब्दों में
कहें तो Layout/
Group Views Element स्वंय Visually दिखाई
नहीं देता लेकिन Android App का User Interface कैसा दिखाई देगा और User Interface के विभन्न UI
Elements (Button , Textbox, Checkbox,
RadioButton Images etc..) Screen पर कहाँ Place होंगे और कैसे दिखाई देंगे , इस बात
को तय करके User Interface को Organize करने का काम Layout / Groupviews Elements द्वारा ही
तय होता है |
Android Framework हमें कई प्रकार के Layout Views Provide करता है ,
जहां <RelativeLayout/> Android Framework द्वरा Automatically
Generated Code का Default Layout View होता
है और हम हमारे Android App के लिए अपनी जरुरत के अनुसार
चाहे जो भी Layout View use करें , सभी में सबसे पहले हमें
निम्नानुसार दो XML Namespaces को Specify करना जरुरी होता है , जो की Android के View
Parser को इस बात की जानकारी देते है , की उन्हें किसी Mobile
/ Tablet Screen पर Android App के GUI
को किस प्रकार से Render करना है |
xmlns:android=http://schemas.android.com/apk/res/android
xmlns:tools=http://schemas.android.com/tools
चुंकि जब Android
Framework का UI Part पूरी तरह से XML
File द्वारा Control होता है , तब एक XML
File में Specify किए जानेवाले विभन्न Elements
की कुछ न कुछ Descriptions होती है , जिनके
आधार पर XML Parser उस XML File की Parsing
करता है , यानी XML File को Run करना है और Description के आधार पर ही Output Generate करता
है | इसी Description
को XML Namespace के नाम से xmlns
Attribute द्वारा Specify किया जाता है |
Activity
Activity एक
User Interface (UI) Concept होता है जो सामान्यतः किसी Android
Application की एक Single Screen को Represent
करता है | इस
User
Interface Screen पर जरुरत
के अनुसार एक या अधिक Views हो सकते है लेकिन views
का होना Compulsory नहीं होता |
यानी
एक ऐसा Android
App भी हो सकता है की जिसकी Activity में कोई
भी views न हो |
किसी Activity
को हम हमारे Android का एक ऐसा Part मान सकते है , जो User को कोई Action Perform
करने में मदद करता है |
सरल
शब्दों में कहें तो Activity User Interface के
रूप में वह माध्यम होता है , जो User Interactions के कारण Perform
होने वाले विभन्न Actions को handle करता है |
उदाहरण के
लिए जब User किसी Android App की किसी Screen पर दिखाई देने वाले किसी Button को Tap करता है , तो उस Tapping Action के Response में Perform होने वाले Task को
इसी Activity Part में Specify व Implement
किया जाता है |
Fragment
जब किसी Android
App की Screen इतनी बड़ी हो की उसकी सभी Functionalities
को एक Single Activity में Manage करना कठिन हो , तो इस स्थिति में उस बड़ी Activity को
कई छोटी – छोटी Sub- Activities में Divide कर दिया जाता है | इन्हीं
छोटी – छोटी Sub – Activities को Fragments कहते है और एक Activity समान समय पर एक या अधिक Fragments
को Screen पर Display कर
सकता है |
किसी Fragment
को हमेशा किसी न किसी Activity में Embedded
होना जरुरी होता है और जिस Activity में कोई Fragment
Embedded होता है , उसकी Life Cycle का Direct
Effect , Fragment की Lifecycle पर पड़ता है |
यानी
Parent
Activity की Lifecycle का End हो जाए , तो Fragment की Lifecycle चाहे Run ही क्यों
न हो रही हो , उसका भी End हो जाता है |
इसी
तरह से जब Parent Activity pause होता है , तो
उसके सभी Embedded Fragments भी Pause हो
जाते है |
किसी Fragment
को अपनी Activity Layout में Insert करने के लिए हमें हमारे Activity की Layout
File में <fragment > Element को Existing
View Group के अंदर ही Use करना होता है अथवा
अपने Application की Code File में Code
के माध्यम से भी इसे Add किया जा सकता है |
Intents
Intents वास्तव
में System messages होते है , जो की Android
Platform को Device के अंदर Running रखते है और उस Android
Platform पर Run होने वाले विभन्न Applications
को विभन्न प्रकार के Events के लिए Notify
करते है |
यानी जिस प्रकार
से हमारे Computer System में Operating
System विभन्न प्रकार के hardware व
Software Events को Trigger करके Application
को कोई Specific Task Complete करने के लिए Notify
करता है , ठीक उसी तरह से Android Device में
किसी भी प्रकार के Hardware State
Change ( जैसेकि SD Card को Device में Insert या Remove करने ) अथवा
Software State Change (जैसेकि SMS के
रूप में नए Incoming Data के आने अथवा जाने या फिर Application
के Menu Option को Touch करने आदि ) के रूप में विभन्न प्रकार के events के Trigger
होने पर भी Android System , Android App को
किसी Specific Task के Complete होने
के लिए Notify करता है |
Sevices
Activities का Lifetime काफी कम होता है और वे कभी भी Shut-Down
हो सकते है अथवा जरुरत के अनुसार उन्हने Close किया जा सकता है | जबकि
Sevices
वे Background Programs होते है , जो User
कि जानकारी के बिना Background में Continually
Run होते रहेते है |
Services को
हम Background Processes भी कह सकते है निम्न चित्रानुसार Windows
OS के Task Manager में दिखाई देने वाले Background proceses कि तरह मान
सकते है , जिनका कोई User Interface नहीं होता ,
बल्कि वे Background में Invisibly Run हो रहे होते है और विभन्न प्रकार कि System व Application
Related Requirements को Fulfill कर रहे होते
है |
उदाहरण के लिए जब
हम हमारे Android Device पर कोई Music सुन रहे होते है , उसी दौरान हम अपने WhatsApp Application पर किसी को Reply भी कर रहे होते है अथवा Hangout
App या Facebook App पर किसी के साथ Chat
भी कर रहें है , लेकिन हमारा Music , Whatsapp , Facebook या Hangout App को use करते
समय भी Contiuously Run हो रहा होता है , क्योंकि वह हमारी
जानकारी के बिना Background में एक Service कि तरह Run हो रहा होता है |
Service कि
यही विशेषता है कि उनका कोई User
Interface होना जरुरी नहीं होता है और बिना User
Interface के भी वे Background में Invisibly
Run होते हुए हमारी किसी Requirement को पूरा
कर रहे होते है |
Android System , Local
Services व Remote Services के रूप में दो
प्रकार कि Services Define कर सकता है |
Local
Services के रूप में जो Service Create कि
जाती है , उसे Current Device का केवल वही Application
Use कर सकता है , जिसने Service को Create
किया होता है , जबकि Remote Service के रूप में जिस Service को Create किया गया होता है , उसे उस Device के विभन्न Applications अपनी जरुरत के अनुसार use
कर सकते है |
Content provider
ऐसे Data,
जिन्हें Device के Multiple
Applications द्वारा Access किया जाना हो , को
इन Applications हेतु Access करवाने के
लिए जिस तरीके का प्रयोग किया जाता है , उसे Content Provider कहते है |
यानी Android
Development Model हमें Content Providers के
माध्यम से Data को इस प्रकार से Develop करने कि सुविधा Provide करता है , ताकि उन्हें Device
के अन्य Applications भी उपयोग ले सकें |
साथ
ही हमारे data पर इन Content Providers का पूरा control भी होता है , जो इस बात को निश्चित
करते है कि विभन्न Applications हमारे Data को किस तरह से Access व Manipulate कर सकेंगे |
इसी प्रकार से
यदि हम हमारे Android app के Data को Store करने के लए SQLite Database use करना चाहते है , तो SQLite Database को Access
व Manipulate करने के लिए Android Architecture
के Content Providers को use कर सकते है , जो कि हमें एक Developer के रूप में
किसी भी प्रकार के Content को Access / Manipulate करने हेतु आसान Encapsulated Access Provide करता है
|
इस प्रकार के Content
Providers वास्तव में हमें हमारे Android Device में stored Data को Android Applications के माध्यम से share करने कि सुविधा Provide करता है , जो कि Android Architecture द्वारा Define
किया गया एक Standard Mechanism है , जिसमें Data
sharing हेतु Underlying Storage, Structure व उनके Implementation को Expose करना जरुरी नहीं होता |
AndroidManifest.xml
प्रत्येक Android
App में AndroidManifest.xml नाम की एक Configuration
File भी होती है , जिसमें Android App से
सम्बंधित सभी Activities को defines व Specify
किया गया होता है साथ ही Main Activity अथवा Android
App की Launcher Activity को भी इसी AndroidManifest.xml
File में Mark किया जाता है |
यानी
इसी File
में इस बात को तय किया जाता है की हमारे Android app की विभन्न Activites में कौन सी Activity
Screen पर सबसे पहले Display होगी |
सामान्यतः हर नया
Android Developer एक मुख्या गलती ये
करता है की वह जब भी अपने Android App में कोई नई Activity
Add करता है , उसे AndroidManifest.xml File में
Specify करना भूल जाता है
और जब तक किसी Activity को इस file में Specify नहीं किया जाता , तब तक हमारा Android
App उसे नहीं पहचानता | इसलिए जब भी कभी
नया Activity Create करें सबसे पहले उसे इस Manifest File में Specify
करें |
No comments