2012-10-08 18 views
7

मैं ऐप पर काम कर रहा हूं जो हर 5 सेकंड में फोन की कुछ स्थिति की जांच करता है। मैं यह किया है कि:थ्रेड और बैटरी खपत

Thread checking = new Thread() { 
    public void run(){ 
     while(<<some status>>) { 
      <<checkstatus and do something>> 
      Thread.sleep(5000); 
     } 
    } 
} 

इस बैटरी के लिए बुरा है? मैं इसे दूसरी तरह से कैसे कर सकता हूं? सेवा कुछ सेकंड के बाद काम करना बंद करो।

उत्तर

5

अपने प्रश्न का उत्तर देने के लिए, यह निर्भर करता है कि आप जबकि लूप के अंदर क्या कर रहे हैं।

यदि आप किसी भी "महंगी" घटकों (जैसे इंटरनेट, ब्लूटूथ, अन्य सेंसर और स्क्रीन) का उपयोग नहीं कर रहे हैं और जाग रहे हैं, तो आपको ठीक होना चाहिए। अनिवार्य रूप से यह है कि ओएस पृष्ठभूमि में वैसे भी काम करता है और थ्रेड का उपयोग सबसे सस्ता तरीकों में से एक है।

इसके अलावा, यदि आपका कार्य सीपीयू गहन है, तो आप बैटरी को भी हटा देंगे।

यदि आप सही करते हैं तो आपकी सेवा ठीक काम करनी चाहिए।

एक और तरीका हैंडलर का उपयोग करेगा, जो आपके लिए थ्रेड प्रबंधन का सार होगा।

+0

उत्तर के लिए धन्यवाद। मैं जांचता हूं कि कुछ अपठित एसएमएस अंत में उपयोगकर्ता अनुस्मारक देते हैं या नहीं। ऐसा करने का यह सबसे अच्छा तरीका है? क्या संभावना है कि एंड्रॉइड मेरे धागे को मार डाले? –

+1

कृपया एसएमएस प्राप्त करने के बारे में जानकारी के लिए http://stackoverflow.com/questions/1973071/broadcastreceiver-sms- प्राप्त करें। आपको इसके बजाय एक रिसीवर का उपयोग करना चाहिए। – Edison

2

थ्रेड.sleep() मौजूदा थ्रेड को निलंबित करने के लिए बनाता है, जिसका अर्थ है कि सीपीयू अन्य धागे के लिए उपलब्ध होगा या बस बंद हो जाएगा। कृपया नींद बलों के संदर्भ स्विच को भी ध्यान दें, लेकिन आप बड़ी नींद अंतराल के साथ सुरक्षित पक्ष पर हैं। तो, आम तौर पर बोलते हुए, सबकुछ आपके ऊपर है।

उदाहरण के लिए, 10 का उपयोग कर सकते हैं ताकि यह सुनिश्चित किया जा सके कि आपका आवेदन ठीक से डिज़ाइन और कार्यान्वित किया गया है।

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