2011-11-22 23 views
6

मैं सैमसंग गैलेक्सी टैब जीटी-पी 1000 से कई सेंसर पढ़ने की कोशिश कर रहा हूं और ऐसा लगता है कि मैंने उपयोग किए गए एप्लिकेशन के काफी सीपीयू को काफी बुरी तरह से दबाया है।एंड्रॉइड सेंसर सीपीयू उपयोग

एक परीक्षण के रूप में, मैं एक छोटी प्रोग्राम है जो Accelerometer सेंसर के लिए SensorEventListener लागू करता है बनाया है, लेकिन सेंसर रीडिंग के साथ कुछ नहीं करता है:

public class SensorTestActivity extends Activity implements SensorEventListener { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     SensorManager oSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE); 
     oSensorManager.registerListener(this, oSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_GAME); 
    } 

    @Override 
    public void onAccuracyChanged(Sensor sensor, int accuracy) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void onSensorChanged(SensorEvent event) { 
     // TODO Auto-generated method stub 

    } 
} 

यह 10% लगातार CPU उपयोग में परिणाम है, जबकि मैं डिबगिंग कर रहा हूँ (यानी मेरा डिवाइस मेरे पीसी में प्लग है) और 5% उपयोग करते समय मैं नहीं हूं। यदि मैं SENSOR_DELAY_FASTEST का उपयोग करता हूं, तो मैं स्कीयरॉकेट को निरंतर 30% तक करता हूं जबकि मैं डिबगिंग कर रहा हूं और 20% जबकि मैं नहीं हूं।

जब मैं एकाधिक सेंसर का उपयोग करना चाहता हूं, तो यह एक बड़ी समस्या पैदा करता है, क्योंकि उनके पास उच्च CPU उपयोग होता है और यह बिना किसी डेटा प्रोसेसिंग के होता है। मैंने एंड्रॉइड मार्केट से कम्पास एप्लिकेशन का उपयोग किया है और उनमें से कोई भी सीपीयू के 5% से अधिक समय का उपयोग नहीं करता है, इसलिए मुझे लगता है कि मुझे कुछ स्पष्ट रूप से स्पष्ट याद आ रही है, लेकिन किसी और को एक ही समस्या नहीं मिल रही है ।

मैंने इस एप्लिकेशन के लिए मैनिफेस्ट फ़ाइल या लेआउट संपादित नहीं किया है - यह एक्लिप्स द्वारा बनाया गया डिफ़ॉल्ट टेम्पलेट है और मैंने सेंसर जोड़ा है।

अद्यतन: CPU उपयोग पढ़ने की मेरी विधि त्रुटिपूर्ण है, क्योंकि मैं इसे मापने के लिए कार्य प्रबंधक का उपयोग कर रहा था। मेरा एप्लिकेशन चालू होने पर सेंसर को रोक नहीं रहा है जब कार्य प्रबंधक खुलता है, जबकि अधिकांश अन्य अनुप्रयोग ऐसा करेंगे।

उत्तर

4

यह 10% निरंतर CPU उपयोग में परिणाम देता है जबकि मैं डिबगिंग कर रहा हूं (यानी मेरा डिवाइस मेरे पीसी में प्लग है) और 5% उपयोग नहीं है। यदि मैं SENSOR_DELAY_FASTEST का उपयोग करता हूं, तो मैं स्कीयरॉकेट को निरंतर 30% तक करता हूं जबकि मैं डिबगिंग कर रहा हूं और 20% जबकि मैं नहीं हूं।

फिर SENSOR_DELAY_UI या SENSOR_DELAY_NORMAL, दोनों सेंसर डाटा के साथ जो आप अद्यतन की कम बार का उपयोग करें और तदनुसार कम CPU समय का उपभोग करना चाहिए।

मैं Android Market से कम्पास अनुप्रयोगों का उपयोग किया है और उनमें से कोई एक निश्चित समय

पर CPU के 5% से अधिक का उपयोग वे शायद SENSOR_DELAY_GAME या SENSOR_DELAY_FASTEST प्रयोग नहीं करते।

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

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

+0

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

+0

@ user1021922: आप कस्टम देरी नहीं कर सकते, क्षमा करें। – CommonsWare

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