pm
और keepScreenOn
चर वैश्विक स्तर पर परिभाषित किए जाने पर अंतिम रूप दिया गया।वेक लॉक को अभी भी
मैं अपने OnCreate विधि में PowerManager.WakeLock हड़पने:
pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
keepScreenOn = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_LOCK,"tpd");
मेरी onStart, onResume में
, और onRestart मैं अपने OnDestroy, onPause, और onStop में
if (keepScreenOn == null) {
keepScreenOn = pm.newakeLock(PowerManager,SCREEN_BRIGHT_LOCK,"tpd");
}
keepScreenOn.acquire();
साथ ताला हड़पने मैंने लॉक को रिलीज़ किया:
if (keepScreenOn != null) {
keepScreenOn.release();
keepScreenOn = null
}
मेरे ऐप से बाहर निकलने के बाद मुझे विफलता स्क्रीन और एडीबी शिकायत मिलती है ains कि
java.lang.Exception: Wakelock को अंतिम रूप दिया, जबकि अभी भी आयोजित: टीपीडी
ट्रेसिंग से पता चलता है कि मैं बाहर निकलने से पहले ताला जारी किया। मुझे क्या याद आया?
वहाँ कम से कम एक, onStop
, या onDestroy
पार करने के बिना कोई रास्ता नहीं है ऐप्लिकेशन से प्रस्थान। मैं देख सकता हूं कि ऐप release()
जितनी बार इसे अधिग्रहण() कहा जाता है, भले ही वाकेलॉक संदर्भित है, फिर भी इसमें शून्य रेफरी होनी चाहिए।
हो सकता है कि यह आपकी समस्या से संबंधित न हो, लेकिन आप इतने सारे स्थानों में लॉक क्यों बना रहे हैं और क्यों जारी कर रहे हैं? क्यों न केवल रेज़्यूम और पर रोकें? – Olegas
मैंने कोशिश की। फिर मैंने प्रत्येक XXX दिनचर्या का पता लगाया। फिर मैंने इसे –
जोड़ा है क्या आपका 'keepScreenOn' चर क्लास में केवल एक बार घोषित किया गया है? क्या कम दायरे के साथ कुछ अन्य घोषणाएं हैं (यानी विधि में घोषित)। – Olegas