कार्य स्नैपशॉट

टास्क स्नैपशॉट एंड्रॉइड 8.0 में पेश किया गया बुनियादी ढांचा है जो हाल के थंबनेल के स्क्रीनशॉट के साथ-साथ विंडो मैनेजर से सहेजे गए सतहों को जोड़ता है। हाल के थंबनेल हाल के दृश्य में किसी कार्य की अंतिम स्थिति का प्रतिनिधित्व करते हैं।

जब कोई गतिविधि रुकी हुई स्थिति में चली जाती है, तो विंडो मैनेजर गतिविधि की सतहों को तब तक नष्ट नहीं करता, जब तक वह गतिविधि कार्य के शीर्ष पर थी। यदि इस गतिविधि को फिर से दिखाना होता, तो विंडो मैनेजर गतिविधि के पहले फ्रेम को चित्रित करने की प्रतीक्षा किए बिना एनीमेशन शुरू करने में सक्षम था, क्योंकि वह इस सहेजे गए सतह का उपयोग करने में सक्षम था।

वास्तुकला

हाल के थंबनेल और सहेजे गए सतहों की दो अवधारणाएं कार्य स्नैपशॉट के साथ एकीकृत हैं। जब कोई कार्य पृष्ठभूमि में चला जाता है, तो विंडो मैनेजर इस कार्य का एक स्क्रीनशॉट ग्राफ़िकबफ़र में रखता है। जब तक कार्य की शीर्ष गतिविधि का अनुप्रयोग मेमोरी में रहता है, तब तक यह ग्राफ़िकबफ़र मेमोरी में बना रहेगा। अब, जब उसी गतिविधि को फिर से सामने लाया जाता है, तो विंडो मैनेजर एक प्रारंभिक विंडो (टास्कस्नैपशॉटसरफेस) बनाएगा, और प्रारंभिक विंडो की बफर कतार में किसी भी मेमोरी को कॉपी किए बिना ग्राफ़िकबफ़र संलग्न करेगा। जैसे ही गतिविधि ने अपना पहला फ्रेम खींचा है, टास्क स्नैपशॉट प्रारंभ विंडो नियमित स्प्लैश स्क्रीन की तरह आसानी से फीकी पड़ जाएगी।

उसी ग्राफ़िकबफ़र को बाइंडर के माध्यम से SystemUI पर भी भेजा जाता है, जिसका उपयोग हाल के दृश्य में किसी कार्य की पूर्वावलोकन स्थिति को खींचने के लिए किया जाता है। चूँकि यह केवल एक बफ़र का संदर्भ है, इसे बाइंडर पर भेजने से कुछ संसाधन खर्च होते हैं। जब ग्राफ़िकबफ़र SystemUI पर आता है, तो इसे एक हार्डवेयर बिटमैप में लपेटा जाता है और फिर ग्राफ़िक्स मेमोरी में किसी भी मेमोरी को अपलोड किए बिना स्क्रीन पर खींचा जाता है।

फ़ायदे

इस नई वास्तुकला के तीन मुख्य लाभ हैं:

  • यदि कार्य स्नैपशॉट को शुरुआती विंडो के रूप में उपयोग किया जाता है, तो स्नैपशॉट और वास्तविक सामग्री के बीच एक अच्छा क्रॉसफ़ेड होता है।
  • जब कार्य स्नैपशॉट SystemUI में खींचा जाता है, तो इसे बिना किसी प्रतिलिपि के किया जा सकता है। पहले बिटमैप को एशमेम में कॉपी करना पड़ता था, फिर ग्राफिक्स मेमोरी में। चूँकि यह विधि स्नैपशॉट को सीधे ग्राफ़िक्स मेमोरी में संग्रहीत करती है, इसलिए किसी प्रतिलिपि की आवश्यकता नहीं होती है।
  • हाल ही में आप जो स्थिति देखते हैं वह हमेशा उस स्थिति से मेल खाती है जिसे आप ऐप को दोबारा खोलते समय पहली बार देखेंगे। यहां समान बफ़र होने से बहुत सारी मेमोरी भी बचती है। इसीलिए Recents अब इन छवियों को पूर्ण रिज़ॉल्यूशन में दिखाने में सक्षम है। पहले, मेमोरी को बचाने के लिए इसका नमूना 64% कम किया गया था।

कार्यान्वयन

यह फीचर पूरी तरह से एंड्रॉइड प्लेटफॉर्म पर मौजूद है। किसी एकीकरण की आवश्यकता नहीं है, और अनुकूलन समर्थित नहीं है। हालाँकि, डिवाइस निर्माता टास्क स्नैपशॉट सुविधा को पूरी तरह से अक्षम कर सकते हैं।

इस सुविधा को अक्षम करने के लिए, इस फ़ंक्शन को संशोधित करें:

frameworks/base/services/core/java/com/android/server/wm/TaskSnapshotController.java#215

ध्यान दें कि यदि सुविधा अक्षम है, तो हाल का दृश्य किसी भी तरह का थंबनेल नहीं दिखाएगा।

उच्च-रिज़ॉल्यूशन और निम्न-रिज़ॉल्यूशन स्नैपशॉट

कार्य स्नैपशॉट डिस्क पर दो पैमानों पर लिखे जाते हैं। डिस्क से किसी कार्य स्नैपशॉट को पुनर्स्थापित करते समय, कम-रिज़ॉल्यूशन वाले स्नैपशॉट को पहले पढ़ा जाता है, और फिर उनके उच्च-रिज़ॉल्यूशन समकक्ष द्वारा प्रतिस्थापित किया जाता है। यह अनुकूलन छवि लोड समय में सुधार करता है। अन्यथा, डिस्क से स्नैपशॉट फ़ाइल को पढ़ने में थोड़ी देरी हो सकती है, और छवि उपलब्ध होने तक उपयोगकर्ता को एक खाली कार्य कार्ड दिखाई देगा। आप config_highResTaskSnapshotScale और config_lowResTaskSnapshotScale सेट करके डिवाइस ओवरले कॉन्फिग फ़ाइल overlay/frameworks/base/core/res/res/values/config.xml में स्केल को कॉन्फ़िगर कर सकते हैं। डिफ़ॉल्ट रूप से, ये क्रमशः 1.0 और 0.5 पर सेट हैं। config_lowResTaskSnapshotScale को 0.0 पर सेट करके कम-रिज़ॉल्यूशन वाले स्नैपशॉट को अक्षम करें।

उदाहरण और स्रोत

इस सुविधा के लिए शेष कोड TaskSnapshot* फ़ाइलों में खोजें:

frameworks/base/+/main/services/core/java/com/android/server/wm/