मैं एक स्पोर्ट्स ऐप लिख रहा हूं जिसे तिमाही/आधा/अवधि के विलुप्त समय को ट्रैक करने की आवश्यकता है। बीतने वाले समय को दूसरे के लिए सटीक होना चाहिए। गेम घड़ी को चलाने के लिए जारी रखना आवश्यक है भले ही उपयोगकर्ता बिजली बटन दबाकर डिवाइस को नींद मोड में स्पष्ट रूप से रखे।एंड्रॉइड टाइमर जो डिवाइस सो रहा है
इस पर मेरा पहला प्रयास Handler.postDelayed() का उपयोग कर घड़ी सुनिश्चित करना है कि "घड़ी" एक स्क्रीन टाइमआउट द्वारा नहीं रोका गया था कि हर 200 मि.से और WindowManager.LayoutParms.FLAG_KEEP_SCREEN_ON टिक्स को गति प्रदान करने शामिल किया गया। लेकिन मुझे जल्द ही पता चला कि डिवाइस को मैन्युअल रूप से सोने के लिए पावर बटन दबाकर इस दृष्टिकोण को बाधित करना संभव था। इसके अलावा, PostDelayed() दृष्टिकोण कुछ घड़ी बहाव का अनुभव कर रहा है, जाहिर है कि रन() विधि में बिताए गए समय का परिणाम। वास्तविक संख्याएं अभी भी सटीक हैं, लेकिन गठबंधन होने की बजाय, उदाहरण के लिए, 5 सेकंड सीमाओं पर जिन्हें उपयोगकर्ताओं द्वारा आसानी से समझा जाता है - शामिल टाइमर बहाव करना शुरू करते हैं, जिसके परिणामस्वरूप कुछ समझने योग्य उपयोगकर्ता भ्रम होता है।
अनुसंधान के एक बिट के बाद मैंने सेवाओं, java timers, AlarmManager प्रयोग करने के लिए techiques पाया, और PartialWakeLock टाइमर लागू करने के लिए। स्वयं द्वारा सेवाएं सोने के लिए जाने वाली डिवाइस से जुड़ी समस्या का समाधान नहीं करेंगे। जावा टाइमर, सेवाओं की तरह, सोने के लिए डिवाइस के साथ समस्या का समाधान नहीं करते हैं। अलार्ममेनगर एक अच्छा दृष्टिकोण की तरह प्रतीत होता है, लेकिन मुझे चिंता है कि यह अलार्ममेनगर का उचित उपयोग नहीं है (यानी, अलार्म के बीच बहुत कम अंतराल)। पार्टियलवेक लॉक का उपयोग करना भी आशाजनक दिखता है, लेकिन स्वयं ही यह घड़ी-बहाव की समस्या का समाधान नहीं करता है।
मैं अलार्ममेनगर और पार्टियलवेक लॉक के संयोजन का प्रयास करने जा रहा हूं। विचार यह है कि अलार्ममेनगर कोड को सरल (उंगलियों से पार) रखने में मदद के लिए घड़ी-बहाव और आंशिक WakeLock का मुकाबला करने में मदद करेगा। मुझे आशा है कि इस दृष्टिकोण के परिणामस्वरूप बिजली संरक्षण, कोड जटिलता और उपयोगकर्ता अपेक्षाओं के बीच उचित संतुलन होगा। किसी भी सलाह की काफी सराहना की जाती है।
धन्यवाद,
रिच
PartialWakeLock का उपयोग कर आप किसी भी बहाव नहीं देखेंगे, लेकिन आपकी बैटरी समाप्त हो जाएगा। – NitZRobotKoder
आपने कहा था कि "बीतने वाले समय को दूसरे के लिए सटीक होना चाहिए"। आप सरल सिस्टम समय का उपयोग क्यों नहीं करते (जैसे System.currentTimeMillis()) ?? बस स्टार्ट पर टाइमस्टैम्प को सहेजें और फिर आवश्यक होने पर इसे वर्तमान समय से घटाएं – Dmitry