Android फ़्रेमवर्क, 2D और 3D ग्राफ़िक रेंडर करने के लिए कई एपीआई उपलब्ध कराता है. ये एपीआई, ग्राफ़िक ड्राइवर के मैन्युफ़ैक्चरर के लागू किए गए वर्शन के साथ इंटरैक्ट करते हैं. इसलिए, यह समझना ज़रूरी है कि ये एपीआई, हाई लेवल पर कैसे काम करते हैं. इस पेज पर, ग्राफ़िक हार्डवेयर ऐब्स्ट्रैक्शन लेयर (एचएएल) के बारे में बताया गया है. ये ड्राइवर, इसी लेयर पर बने होते हैं. इस सेक्शन को पढ़ने से पहले, इन शब्दों के बारे में जान लें:
Canvas (एपीआई एलिमेंट)Surface ऑब्जेक्ट के मुकाबले होती है. Canvas क्लास में, बिटमैप, लाइन, सर्कल, रेक्टैंगल, टेक्स्ट वगैरह को कंप्यूटर पर ड्रॉ करने के स्टैंडर्ड तरीके मौजूद होते हैं. यह क्लास, बिटमैप या सरफेस से जुड़ी होती है. कैनवस, स्क्रीन पर 2D ऑब्जेक्ट ड्रॉ करने का सबसे आसान तरीका है. बेसिक क्लास, Canvas है.
android.graphics.drawable.
ड्रॉएबल और अन्य रिसॉर्स के बारे में ज़्यादा जानने के लिए, ऐप्लिकेशन के रिसॉर्स की खास जानकारी देखें.
android.opengl
` और `javax.microedition.khronos.opengles
` पैकेज, OpenGL ES की सुविधाएं उपलब्ध कराते हैं.Surface (एपीआई एलिमेंट)Surface ऑब्जेक्ट का साइज़ बदलने के लिए, कई हेल्पर तरीके उपलब्ध होते हैं.
SurfaceView
क्लास के बजाय, सीधे
Surface क्लास का इस्तेमाल करें.
SurfaceView (एपीआई एलिमेंट)View ऑब्जेक्ट होता है. यह ड्रॉ करने के लिए,
Surface ऑब्जेक्ट को रैप करता है. साथ ही, इसका साइज़ और फ़ॉर्मैट
डाइनैमिक तरीके से तय करने के लिए, तरीके उपलब्ध कराता है. सरफ़ेस व्यू, रिसॉर्स-इंटेंसिव कार्रवाइयों के लिए, यूज़र इंटरफ़ेस (यूआई) थ्रेड से अलग ड्रॉ करने का तरीका उपलब्ध कराता है.
जैसे, गेम या कैमरे के प्रीव्यू. हालांकि, इसके लिए ज़्यादा मेमोरी का इस्तेमाल किया जाता है.
सरफ़ेस व्यू, कैनवस और OpenGL ES
ग्राफ़िक, दोनों को सपोर्ट करता है. SurfaceView ऑब्जेक्ट के लिए, बेसिक क्लास
SurfaceView है.
R.style में दी गई है. साथ ही, इनके आगे Theme_ लिखा होता है.View (एपीआई एलिमेंट)View क्लास, ऐक्टिविटी या डायलॉग स्क्रीन के ज़्यादातर लेआउट कॉम्पोनेंट के लिए बेसिक क्लास
होती है. जैसे, टेक्स्ट बॉक्स
और विंडो. कोई View ऑब्जेक्ट, खुद को ड्रॉ करने के लिए, अपने पैरंट ऑब्जेक्ट से कॉल लेता है (देखें
ViewGroup). साथ ही, यह अपने पैरंट ऑब्जेक्ट
को, अपने पसंदीदा साइज़ और जगह के बारे में बताता है. ऐसा हो सकता है कि पैरंट
ऑब्जेक्ट, इसकी पसंद के मुताबिक काम न करे. ज़्यादा जानकारी के लिए, View देखें.
ViewGroup (एपीआई एलिमेंट)android.widget
पैकेज में होते हैं. हालांकि, ये
ViewGroup
क्लास को एक्सटेंड करते हैं.
android.widget
पैकेज में होते हैं. Window (एपीआई एलिमेंट)Window
ऐब्स्ट्रैक्ट क्लास से लिया गया एक ऑब्जेक्ट होता है. यह सामान्य
विंडो के एलिमेंट तय करता है. जैसे, लुक ऐंड फ़ील, टाइटल बार टेक्स्ट, और मेन्यू की जगह और कॉन्टेंट.
डायलॉग और ऐक्टिविटी, Window ऑब्जेक्ट रेंडर करने के लिए,
Window क्लास के लागू किए गए वर्शन का इस्तेमाल करते हैं. आपको अपने ऐप्लिकेशन में,
Window क्लास को लागू करने या विंडो का इस्तेमाल करने की ज़रूरत नहीं है.ऐप्लिकेशन डेवलपर, स्क्रीन पर तीन तरीकों से इमेज ड्रॉ करते हैं: कैनवस, OpenGL ES या Vulkan की मदद से.
Android के ग्राफ़िक कॉम्पोनेंट
डेवलपर, रेंडरिंग के लिए कोई भी एपीआई इस्तेमाल करें, हर चीज़ को किसी सरफ़ेस पर रेंडर किया जाता है. सरफ़ेस, बफ़र क्यू की प्रोड्यूसर साइड को दिखाता है. इसे अक्सर SurfaceFlinger इस्तेमाल करता है. Android प्लैटफ़ॉर्म पर बनाई गई हर विंडो, किसी सरफ़ेस पर काम करती है. SurfaceFlinger, रेंडर की गई सभी दिखने वाली सरफ़ेस को डिसप्ले पर कंपोज़ करता है.
इस डायग्राम में दिखाया गया है कि मुख्य कॉम्पोनेंट एक साथ कैसे काम करते हैं:

पहली इमेज. सरफ़ेस कैसे रेंडर की जाती हैं.
मुख्य कॉम्पोनेंट के बारे में, यहां बताया गया है.
इमेज स्ट्रीम प्रोड्यूसर
इमेज स्ट्रीम प्रोड्यूसर, कोई भी ऐसी चीज़ हो सकती है जो इस्तेमाल के लिए ग्राफ़िक बफ़र बनाती है. उदाहरण के लिए, OpenGL ES, Canvas 2D, और mediaserver वीडियो डिकोडर.
इमेज स्ट्रीम कंज्यूमर
इमेज स्ट्रीम का सबसे आम कंज्यूमर, SurfaceFlinger है. यह सिस्टम सेवा है, जो फ़िलहाल दिखने वाली सरफ़ेस का इस्तेमाल करती है और Window Manager से मिली जानकारी का इस्तेमाल करके, उन्हें डिसप्ले पर कंपोज़ करती है. SurfaceFlinger, सिर्फ़ ऐसी सेवा है जो डिसप्ले के कॉन्टेंट में बदलाव कर सकती है. SurfaceFlinger, OpenGL और Hardware Composer (HWC) का इस्तेमाल करके, सरफ़ेस के ग्रुप को कंपोज़ करता है.
अन्य OpenGL ES ऐप्लिकेशन भी, इमेज स्ट्रीम का इस्तेमाल कर सकते हैं. जैसे, कैमरा ऐप्लिकेशन, कैमरे के प्रीव्यू की इमेज स्ट्रीम का इस्तेमाल करता है. नॉन-जीएल ऐप्लिकेशन भी कंज्यूमर हो सकते हैं. उदाहरण के लिए, ImageReader क्लास.
हार्डवेयर कंपोज़र
डिसप्ले सबसिस्टम के लिए, हार्डवेयर ऐब्स्ट्रैक्शन. SurfaceFlinger, कंपोज़िशन से जुड़े कुछ काम, HWC को सौंप सकता है, ताकि OpenGL और जीपीयू पर पड़ने वाले लोड को कम किया जा सके. SurfaceFlinger, सिर्फ़ एक और OpenGL ES क्लाइंट के तौर पर काम करता है. इसलिए, जब SurfaceFlinger, एक या दो बफ़र को तीसरे बफ़र में कंपोज़ करता है, तो वह OpenGL ES का इस्तेमाल करता है. इससे, कंपोज़िशन में कम पावर लगती है. ऐसा इसलिए, क्योंकि जीपीयू को सभी कंप्यूटेशन नहीं करने पड़ते.
The Hardware Composer HAL, बाकी का काम करता है. यह Android के सभी ग्राफ़िक रेंडरिंग के लिए, मुख्य पॉइंट होता है. HWC को इवेंट सपोर्ट करना चाहिए. इनमें से एक इवेंट, VSync है. दूसरा इवेंट, प्लग-ऐंड-प्ले एचडीएमआई सपोर्ट के लिए हॉटप्लग है.
Gralloc
इमेज प्रोड्यूसर की ओर से अनुरोध की गई मेमोरी को ऐलोकेट करने के लिए, ग्राफ़िक मेमोरी ऐलोकेटर (Gralloc) की ज़रूरत होती है. ज़्यादा जानकारी के लिए, BufferQueue और Gralloc देखें.
डेटा फ़्लो
इस डायग्राम में, Android के ग्राफ़िक पाइपलाइन को दिखाया गया है:

दूसरी इमेज. Android के ज़रिए ग्राफ़िक डेटा का फ़्लो.
बाईं ओर मौजूद ऑब्जेक्ट, रेंडरर होते हैं. ये ग्राफ़िक बफ़र बनाते हैं. जैसे, होम स्क्रीन, स्टेटस बार, और सिस्टम यूज़र इंटरफ़ेस (यूआई). SurfaceFlinger, कंपोज़िटर है और HWC, कंपोज़र है.
BufferQueue
BufferQueue, Android के ग्राफ़िक कॉम्पोनेंट के बीच कनेक्शन उपलब्ध कराता है. ये दो क्यू होते हैं, जो प्रोड्यूसर से कंज्यूमर तक बफ़र के लगातार साइकल को मैनेज करते हैं. प्रोड्यूसर के बफ़र सौंपने के बाद, SurfaceFlinger, डिसप्ले पर हर चीज़ को कंपोज़ करने की ज़िम्मेदारी लेता है.
इस डायग्राम में, BufferQueue के कम्यूनिकेशन की प्रोसेस दिखाई गई है:

तीसरी इमेज. BufferQueue के कम्यूनिकेशन की प्रोसेस.
BufferQueue में, इमेज स्ट्रीम प्रोड्यूसर और इमेज स्ट्रीम कंज्यूमर को एक साथ जोड़ने वाला लॉजिक शामिल होता है. इमेज प्रोड्यूसर के कुछ उदाहरण, कैमरा एचएएल या OpenGL ES गेम से जनरेट किए गए कैमरे के प्रीव्यू हैं. इमेज कंज्यूमर के कुछ उदाहरण, SurfaceFlinger या कोई अन्य ऐप्लिकेशन है, जो OpenGL ES स्ट्रीम दिखाता है. जैसे, कैमरा ऐप्लिकेशन, कैमरे का व्यूफ़ाइंडर दिखाता है.
BufferQueue, एक डेटा स्ट्रक्चर है. यह बफ़र पूल को क्यू के साथ जोड़ता है. साथ ही, प्रोसेस के बीच बफ़र पास करने के लिए, Binder इंटर-प्रोसेस कम्यूनिकेशन (आईपीसी) का इस्तेमाल करता है. प्रोड्यूसर इंटरफ़ेस या
वह चीज़ जो ग्राफ़िक बफ़र जनरेट करने वाले किसी व्यक्ति को पास की जाती है, है
IGraphicBufferProducer (SurfaceTexture का हिस्सा है).
BufferQueue का इस्तेमाल अक्सर, किसी Surface पर रेंडर करने और GL
Consumer के साथ इस्तेमाल करने के लिए किया जाता है. इसके अलावा, अन्य टास्क के लिए भी इसका इस्तेमाल किया जाता है.
BufferQueue, तीन अलग-अलग मोड में काम कर सकता है:
ज़्यादातर काम करने के लिए, SurfaceFlinger, सिर्फ़ एक और OpenGL ES क्लाइंट के तौर पर काम करता है. इसलिए, जब SurfaceFlinger, एक या दो बफ़र को तीसरे बफ़र में कंपोज़ करता है, तो वह OpenGL ES का इस्तेमाल करता है.
Hardware Composer HAL, बाकी का काम करता है. यह एचएएल, Android के सभी ग्राफ़िक रेंडरिंग के लिए, मुख्य पॉइंट के तौर पर काम करता है.