2010-10-19 20 views
7

अभी तक नहीं एक डेवलपर पर ताज़ा दर सिर्फ .. जानने के लिए कि एक Android एप्लिकेशन मैं क्या जरूरत है क्या कर सकते हैं की कोशिश कर रहानियंत्रण प्रदर्शन, Android डिवाइस

मैं क्या जरूरत है: कि एक को प्रदर्शित करता है

सरल अनुप्रयोग एक निश्चित आवृत्ति पर एक निश्चित तीव्रता पर एकल रंग ऑनस्क्रीन का पूर्ण फ्रेम! मैं के रूप में उच्च एक (जितना संभव हो उच्च एक निश्चित आवृत्ति के साथ एक ज्ञात पैटर्न में एक तीव्रता को बदलने के द्वारा प्राप्त) संभव के रूप में संकल्प के साथ एक तुल्यकालन उद्देश्य के लिए की जरूरत है।

क्या सवाल मेरे पास है:

  1. या एक तय प्रदर्शन आवृत्ति के साथ एक Android डिवाइस रन वहाँ यह 60fps कहना की एक निश्चित आवृत्ति को स्थापित करने के लिए किसी भी तरह से है?

  2. तय आवृत्ति प्राप्त किया जा सकता है, वहाँ बाधा समान या कुछ और मुझे सही समय पर स्क्रीन पर तीव्रता बदल देता है कि एक vsync है।

  3. यदि उपर्युक्त दो चीजें प्राप्त हो सकती हैं, तो मुझे किस दृष्टिकोण को लेने की आवश्यकता है। मैं सोच रहा हूँ मैं OpenGL ES और शायद NDK पर देखने की जरूरत है .... किसी को भी कृपया मुझे सही दिशा में बात कर सकते हैं ....

उत्तर

9

मैं ताज़ा दर को ठीक करने की उम्मीद करेंगे हार्डवेयर या प्रदर्शन चालक स्तर पर। an API for finding out what it is है, लेकिन मुझे शक है कि आप इसे सेट कर सकते हैं।

मैं एक खेल है, जिसमें 40fps की एक निश्चित फ़्रेमरेट कार्यान्वित लिखा था। बुनियादी तकनीक एक ऑफ स्क्रीन बफर के लिए सब कुछ ... कुछ जो जीएल के साथ अपने आप होता है लेकिन जो हाथ से किया जा सकता है अगर कैनवास का उपयोग कर है आकर्षित करने के लिए किया गया था।

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

+0

आपको बहुत बहुत रूबेन धन्यवाद! – Mathias

+0

आपके उत्तर रूबेन के लिए बहुत बहुत धन्यवाद! यह अच्छी समझ में आता है कि डिस्प्ले एक हार्डवेयर स्तर पर एक निश्चित आवृत्ति पर चलाया जाता है और मैं getRefreshRate() का उपयोग कर डिस्प्ले रीफ्रेश दर प्राप्त कर सकता हूं और इसे अपने सिंक्रनाइज़ेशन में उपयोग कर सकता हूं, इसलिए एकमात्र सवाल यह है कि मुझे कैसे पता चलेगा प्रदर्शन प्रस्तुत किया गया है। क्या मेरे बनाम काउंटर को नियंत्रित करने के लिए एक बनाम विरोधाभास या मेरे लिए कुछ ऐसा है जो मैं अपनी तीव्रता पीढ़ी में उपयोग कर सकता हूं? – Mathias

+0

एक पुराने पुराने स्कूल प्रोग्रामर से मिलना अच्छा लगता है जो स्पष्ट रूप से ऊर्ध्वाधर खाली अंतराल में जितना संभव हो सके करने के महत्व को याद करता है ... :) –

0

मैथियास,

इसलिए, यदि आप Android पर प्रदर्शन के साथ सिंक्रनाइज़ करना चाहते हैं, बस एंड्रॉयड आपको बता जब दृश्य तैयार करने की आवश्यकता है। आप एंड्रॉइड से क्लास क्लास से क्लास प्राप्त करेंगे। आप व्यू क्लासेस ऑन ड्रा() विधि को ओवरराइड करेंगे जो प्रत्येक बार दृश्य को रीफ्रेश करने की आवश्यकता होने पर एंड्रॉइड कॉल करेगा।

यदि आप यह सुनिश्चित करना चाहते हैं कि आपके द्वारा प्रदर्शित प्रत्येक फ्रेम समय की पूर्व निर्धारित लंबाई की है, तो आप शायद एक नया थ्रेड स्थापित करना चाहेंगे। नए धागे में आप एक टाइमिंग लूप दर्ज करेंगे - System.nanoTime() (एक दूसरे रिज़ॉल्यूशन का अरबवां) को एक चर में कैप्चर करके प्रारंभ करें, फिर अपनी इच्छित फ्रेम लंबाई तक पहुंचने तक लूप करें, फिर वैश्विक स्थिर बूलियन चर अद्यतन करें। तीव्रता को बदलने का समय कब निर्धारित करने के लिए इस वैश्विक स्थिर बूलियन को आपके ऑनड्रा() विधि में चेक किया जा सकता है।

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