29

मैं एक ऐप्लिकेशन है जो इसे बहुत ही फेसबुक Android मूल के अनुप्रयोग के लिए इसी तरह की सुविधा विकसित करने कर रहा हूँ।एंड्रॉइड हार्डवेयर त्वरण - उपयोग करने या उपयोग करने के लिए नहीं? उस समय के सबसे अधिक उपयोगकर्ता एक अंतहीन <code>ListView</code> में खर्च करेगा बहुत की छवियों में से प्रदर्शित करने, एक छवि गैलरी में प्रवेश, और इतने पर सामाजिक नेटवर्क:

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

मान लें कि मेरे ऐप में हर चीज सबसे अच्छे तरीके से लिखी गई है और सर्वोत्तम प्रथाओं के बाद (चर्चा ...: ->)

मेरा ऐप उस चरण में बिल्कुल भी बुरा नहीं काम करता है, लेकिन जब हार्डवेयर त्वरण को चालू करता है, जैसा वर्णन और वादा किया गया है Android Developers documentationयह मेरे ऐप को अधिक चिकनी और तेज़ बनाता है।

मान लें कि यह यूआई के रूप में हुआ जा सके तो उन्हें nagative तरह से प्रभावित नहीं करता है, और मैं Unsupported Operations

विषय पर गूगल के दस्तावेज़ के अनुसार के किसी भी प्रदर्शन, एकमात्र कारण मैं देख सकता हूँ नहीं कर रहा हूँ इस सुविधा का उपयोग न करने के लिए (ऊपर उल्लिखित अन्य सभी कारणों के अलावा) यह है कि यह मेरे ऐप को अधिक रैम का उपयोग करने का कारण बन सकता है। लेकिन कितनी रैम? बहुत अधिक? मुझे पता है कि जब मेरा ऐप बहुत सारी रैम का उपभोग करता है - यह ओएस द्वारा नष्ट होने के लिए अच्छा उम्मीदवार बन जाता है जब उसे कुछ स्मृति मुक्त करने की आवश्यकता होती है।

मेरे सवाल का मूल रूप से है -

  • यह "ठीक है" मेरी परिस्थितियों में इस सुविधा का उपयोग करने के लिए है?
  • अन्य क्या समस्याओं का उपयोग करने से बढ़ा सकते हैं?

TIA

उत्तर

30

उपयोग करने के लिए या उपयोग करने के लिए नहीं

यह हार्डवेयर त्वरण केवल यदि आप, स्केलिंग घूर्णन और छवियों के अनुवाद के लिए जटिल कस्टम संगणना है उपयोग करने के लिए सलाह दी जाती है, लेकिन उपयोग नहीं करते यह लाइनों या घटता (और अन्य तुच्छ संचालन) ड्राइंग के लिए (source)।

आप आम संक्रमण होने और यह भी, यह देखते हुए कि आप पहले से ही स्केलिंग, रीसाइक्लिंग, कैशिंग आदि पर विचार किया है की तुलना में यह अब और बोझ अपने प्रोजेक्ट में कोई मतलब नहीं हो सकता है पर योजना है। इसके अलावा, किसी भी प्रयास हार्डवेयर त्वरण 3.0 नीचे संस्करणों है, जो कर रहे हैं 8 मई के रूप में बाजार की ~ 36% पर उपयोगकर्ताओं को प्रभावित नहीं करेंगे समर्थन करने के लिए, 2013

मेमोरी

स्मृति के उपयोग के बारे में अपने कोड दोबारा काम खर्च (this article के अनुसार), एंड्रॉयड हार्डवेयर आवेदन भार अप प्रत्येक प्रक्रिया के लिए OpenGL ड्राइवर को शामिल करके, मोटे तौर पर 2 एमबी की स्मृति उपयोग लेता है, और 8MB करने के लिए इसे बढ़ा देता है।

अन्य मुद्दों

अलावा API संस्करण से, मुझे लगता है यह भी बैटरी जीवन को प्रभावित करेगा।दुर्भाग्यवश इस पर एक रेखा खींचने के लिए ऑनलाइन विभिन्न उपयोग मामलों पर कोई बेंचमार्क नहीं हैं। कुछ लोग तर्क देते हैं कि कई जीपीयू कोरों के कारण दिए गए मामलों में, त्वरण का उपयोग करके बैटरी जीवन बचा सकता है। कुल मिलाकर, मुझे लगता है कि यह सुरक्षित होगा कि प्रभाव बहुत नाटकीय नहीं होगा (या Google ने इसे एक प्रमुख बिंदु बना दिया होगा)।

+0

आपके उत्तर के लिए धन्यवाद। आपने लिखा है कि मेरा ऐप एंड्रॉइड पीआर-हनीकॉम के साथ संगत नहीं होगा, लेकिन मुझे लगता है कि यह सच नहीं है: जब तक लक्ष्य 11+ है - आप इस सुविधा का उपयोग कर सकते हैं, लेकिन अगर ऐप चालू होता है तो यह कुछ भी नहीं करेगा पुराना मंच अभी के लिए मैंने केवल आपके अच्छे जवाब को उखाड़ फेंक दिया है और इसे स्वीकार नहीं किया है, क्योंकि मुझे और अधिक स्पष्टीकरण प्राप्त करने का मौका मिलेगा .. –

+0

डेवलपर दस्तावेज़ों के अनुसार: एंड्रॉइड 3.0 (एपीआई लेवल 11) में शुरू, एंड्रॉइड 2 डी रेंडरिंग पाइपलाइन हार्डवेयर त्वरण का बेहतर समर्थन करने के लिए डिज़ाइन किया गया है। यह पोस्ट एपीआई स्तर 11 के नीचे समर्थन के लिए मदद कर सकता है - http://stackoverflow.com/questions/16235637/hardware-acceleration-flag – Neil

+1

@ टालकेनेल मेला बिंदु, आप सही हैं - यह असंगतता उत्पन्न नहीं करेगा, मैंने संपादित किया है मेरा जवाब तदनुसार –

10

अद्यतन

हार्डवेयर त्वरण डिफ़ॉल्ट रूप से सक्षम है, तो अपने लक्ष्य एपीआई स्तर > = 14


मैं अपनी स्थिति, हार्डवेयर त्वरण का उपयोग में कह सकते हैं कि हां में है है।

यह देखते हुए कि आप अपने ऐप में किसी भी संसाधन गहन नियंत्रण का उपयोग नहीं कर रहे हैं, यह हार्डवेयर त्वरण को सक्षम करने में कोई समस्या नहीं होनी चाहिए। जैसा कि आपने कहा था कि आपका ऐप हार्डवेयर त्वरण के बिना काफी अच्छा काम कर रहा है।

आप को सक्षम करते हैं हार्डवेयर त्वरण एंड्रॉयड अपने GPU का उपयोग करके शुरू कर देंगे और क्योंकि हार्डवेयर त्वरण सक्षम करने के लिए आवश्यक संसाधनों की वृद्धि हुई है, अपने ऐप्लिकेशन को अधिक रैम की खपत होगी।


एक अक्सर पूछे जाने वाले प्रश्न है विल एक बहुत बड़ा राशि से राम वृद्धि की राशि?

:

जवाब यह है कि करने के लिए सभी से निर्धारित किया जाएगा। आपकी प्रोग्रामिंग क्षमता यानी। रीसाइक्लिंग सूची का प्रबंधन, छवियों ect की स्केलिंग।

। डिवाइस

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


हार्डवेयर त्वरण का उपयोग करके अन्य समस्याएं कैसे उठा सकती हैं?

हार्डवेयर त्वरण कुछ 2 डी ड्राइंग संचालन के लिए समस्याएं पैदा कर सकता है। आप अनुभव करते हैं जब आप अपने एप्लिकेशन में केवल विशिष्ट गतिविधियों के लिए हार्डवेयर त्वरण सक्षम कर सकते हैं Hardware Acceleration post in the android Developer Docs

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

इस तरह आप भी हार्डवेयर त्वरण सीमित कर सकते हैं अपने ऐप लेकिन इसकी आवाज़ से आपको अपने अधिकांश ऐप्स फ़ंक्शंस के लिए इसकी आवश्यकता होगी।

उम्मीद है कि यह

+0

+1। @neil क्या आपके पास सामान्य संदर्भ बिंदु के रूप में साझा करने के लिए कोई अनुमानित संख्या है? –

+0

अगर मुझे संख्याएं लिखनी पड़े तो मैं झूठ बोलूंगा! मैंने कभी डिवाइस द्वारा राम अंतर की स्थिरता को नहीं लिया। मुझे पता है कि 500 ​​एमबी रैम वाले डिवाइस द्वारा आवंटित रैम की मात्रा 1 जीबी रैम वाले डिवाइस से काफी कम है। ऐप के लिए रैम आवंटन पृष्ठभूमि में चल रहे अन्य ऐप्स और राम की उपलब्ध मात्रा से भी प्रभावित हो सकता है लेकिन यह हर किसी द्वारा बनाई गई धारणा है। – Neil

संबंधित मुद्दे