टास्क स्नैपशॉट Android 8.0 में पेश किया गया इंफ़्रास्ट्रक्चर है. यह हाल ही के थंबनेल और सेव किए गए प्लैटफ़ॉर्म के लिए स्क्रीनशॉट विंडो मैनेजर से. हाल ही के थंबनेल इसमें मौजूद टास्क की आखिरी स्थिति दिखाते हैं हाल ही का व्यू.
जब कोई गतिविधि रुक गई, तब विंडो मैनेजर ने अगर वह गतिविधि टास्क में सबसे ऊपर थी, तो उस गतिविधि की झलक दिखेगी. अगर आपने इस गतिविधि को फिर से दिखाना ज़रूरी था, इसलिए विंडो मैनेजर गतिविधि का पहला फ़्रेम बनाने के लिए इंतज़ार किए बिना, ऐनिमेशन यह सेव किए गए इस प्लैटफ़ॉर्म का इस्तेमाल कर सकता था.
भवन निर्माण
'हाल ही के थंबनेल' और सेव किए गए प्लैटफ़ॉर्म के दो कॉन्सेप्ट को टास्क के साथ इंटिग्रेट किया गया है स्नैपशॉट. जब कोई टास्क बैकग्राउंड में जाता है, तब विंडो मैनेजर उसका स्क्रीनशॉट डालता है इस टास्क को GraphicBuffer में. जब तक कि सबसे ऊपर वाला ऐप्लिकेशन टास्क की गतिविधि मेमोरी में सेव रहती है, तो यह GraphicBuffer को मेमोरी. अब, वही गतिविधि फिर से सामने आने पर, विंडो इसके बाद, मैनेजर एक शुरुआती विंडो (TaskSnapshotSurface) बनाएगा और किसी भी मेमोरी को शुरुआती हिस्से की बफ़र सूची में कॉपी किए बिना GraphicBuffer विंडो. गतिविधि का पहला फ़्रेम बनाते ही, टास्क का स्नैपशॉट शुरू होने वाली विंडो, सामान्य स्प्लैश स्क्रीन की तरह आसानी से फ़ेड हो जाएगी.
इसी GraphicBuffer को Binder पर SystemUI को भेजा जाता है, ताकि इसका इस्तेमाल ड्रॉ करने के लिए किया जा सके हाल ही के व्यू में किसी टास्क की झलक की स्थिति. क्योंकि यह सिर्फ़ एक रेफ़रंस है बफ़र होने पर, इसे बाइंडर पर भेजने से कुछ संसाधनों की ज़रूरत नहीं होती है. जब GraphicBuffer, SystemUI पर आई और उसे हार्डवेयर बिटमैप में रैप किया गया और फिर ग्राफ़िक मेमोरी में कोई मेमोरी अपलोड किए बिना स्क्रीन पर बनाया जा सकता है.
फ़ायदे
इस नए आर्किटेक्चर के तीन मुख्य फ़ायदे हैं:
- अगर टास्क के स्नैपशॉट को शुरुआती विंडो के तौर पर इस्तेमाल किया जाए, तो एक अच्छा क्रॉसफ़ेड होगा स्नैपशॉट और वास्तविक कॉन्टेंट के बीच स्विच करें.
- जब SystemUI में टास्क का स्नैपशॉट बनाया जाता है, तो इसे बिना किसी रुकावट के पूरा किया जा सकता है कॉपी करना. पहले बिटमैप को Atmem में कॉपी करना होता था और फिर उसे ग्राफ़िक के तौर पर बनाया जाता था मेमोरी. यह तरीका स्नैपशॉट को सीधे ग्राफ़िक्स मेमोरी में सेव करता है, इसलिए नहीं कॉपी करना ज़रूरी है.
- 'हाल ही के' सेक्शन में दिखने वाली स्थिति, हमेशा उस स्थिति से मेल खाती है जब आपको पहली बार ऐप को फिर से खोल रहा है. यहां एक जैसा बफ़र होने से बहुत सी मेमोरी भी बचती है. इसलिए, 'हाल ही के' सेक्शन में अब इन इमेज को पूरे रिज़ॉल्यूशन में दिखाया जा सकता है. इससे पहले, मेमोरी सेव करने के लिए इसे 64% तक कम कर दिया गया था.
लागू करना
यह सुविधा पूरी तरह से Android प्लैटफ़ॉर्म पर मौजूद है. कोई इंटिग्रेशन नहीं है ज़रूरी है, और इसे पसंद के मुताबिक नहीं बनाया जा सकता. हालांकि, डिवाइस मैन्युफ़ैक्चरर यह काम कर सकते हैं तो आप टास्क स्नैपशॉट सुविधा को पूरी तरह बंद कर सकते हैं.
इस सुविधा को बंद करने के लिए, इस फ़ंक्शन में बदलाव करें:
frameworks/base/services/core/java/com/android/server/wm/TaskSnapshotController.java#215
ध्यान दें कि यदि सुविधा अक्षम हो, तो हाल ही के दृश्य थंबनेल भी बनाए जा सकते हैं.
हाई रिज़ॉल्यूशन और लो रिज़ॉल्यूशन वाले स्नैपशॉट
टास्क के स्नैपशॉट, डिस्क पर दो स्केल पर लिखे जाते हैं. किसी टास्क को वापस लाने में डिस्क से स्नैपशॉट लेने के बाद, लो रिज़ॉल्यूशन वाले स्नैपशॉट को पहले पढ़ा जाता है. इसके बाद, ये दोनों तरह की टेक्नोलॉजी हो सकती हैं. इस ऑप्टिमाइज़ेशन से, इमेज लोड होने में ज़्यादा समय लगता है. अगर ऐसा नहीं किया जाता है, तो स्प्रेडशीट से स्नैपशॉट फ़ाइल को पढ़ने में कुछ समय लग सकता है डिस्क पर अपलोड कर सकता है और इमेज उपलब्ध होने तक उपयोगकर्ता को एक खाली टास्क कार्ड दिखेगा. डिवाइस ओवरले कॉन्फ़िगरेशन फ़ाइल में स्केल को कॉन्फ़िगर किया जा सकता है सेटिंग के हिसाब सेoverlay/frameworks/base/core/res/res/values/config.xml
config_highResTaskSnapshotScale
और
config_lowResTaskSnapshotScale
. डिफ़ॉल्ट रूप से, ये 1.0 पर सेट होते हैं
और 0.5. सेटिंग करके, लो रिज़ॉल्यूशन वाले स्नैपशॉट बंद करें
config_lowResTaskSnapshotScale
से 0.0 तक.
उदाहरण और सोर्स
इस सुविधा के लिए, TaskSnapshot* फ़ाइलों में बाकी कोड ढूंढें:
frameworks/base/+/main/services/core/java/com/android/server/wm/