मैंने नई जीसीएम लाइब्रेरी में भी एक ही अपवाद का पता लगाया है। दरअसल पुरानी सी 2 डीएम एंड्रॉइड लाइब्रेरी में एक ही त्रुटि है, एक ही क्रैश है, और Google ने अभी तक इसे ठीक नहीं किया है। जैसा कि हम अपने आंकड़ों से देख सकते हैं, इस क्रैश का सामना करने वाले उपयोगकर्ताओं का लगभग 0.1%।
मेरी जांच से पता चलता है कि समस्या जीसीएम लाइब्रेरी में नेटवर्क WakeLock
के गलत रिलीज में है, जब लाइब्रेरी WakeLock
जारी करने का प्रयास करती है जिसमें कुछ भी नहीं है (आंतरिक लॉक काउंटर नकारात्मक हो जाता है)।
मैं सरल समाधान से संतुष्ट था - बस इस अपवाद को पकड़ें और कुछ भी नहीं करें, क्योंकि हमें कोई अतिरिक्त नौकरी करने की आवश्यकता नहीं है तो हमारे वाकेलॉक में कुछ भी नहीं है।
ऐसा करने के लिए आपको पहले से संकलित .jar
फ़ाइल की बजाय, अपने प्रोजेक्ट में जीसीएम लाइब्रेरी स्रोत आयात करने की आवश्यकता है। आप जीसीएम लाइब्रेरी स्रोतों को "$ एंड्रॉइड_SDK_Home $/extras/google/gcm/gcm-client/src" फ़ोल्डर के अंतर्गत पा सकते हैं (आपको एंड्रॉइड एसडीके प्रबंधक का उपयोग करके इसे पहले डाउनलोड करना होगा)।
अगला ओपन GCMBaseIntentService
वर्ग, लाइन
sWakeLock.release();
खोजने के लिए और कोशिश पकड़ साथ उस पर घेरा। his answer में सुझाव दिया @fasti रूप Alternativally,, आप अगर wakelock वास्तव में इस ताला पकड़े जाँच करने के लिए mWakeLock.isHeld()
विधि का उपयोग कर सकते हैं:
यह इस तरह दिखना चाहिए:
synchronized (LOCK) {
// sanity check for null as this is a public method
if (sWakeLock != null) {
Log.v(TAG, "Releasing wakelock");
try {
sWakeLock.release();
} catch (Throwable th) {
// ignoring this exception, probably wakeLock was already released
}
} else {
// should never happen during normal workflow
Log.e(TAG, "Wakelock reference is null");
}
}
अद्यतन।
आप इसे करने की कोशिश की ..? क्या यह कोशिश करने के साथ इसे आसपास के बाद ठीक चलाता है .. – Rookie
हां, मैंने इस समाधान को हमारी सभी परियोजनाओं में कार्यान्वित किया है, यह पूरी तरह से काम करता है (2 एम उपयोगकर्ताओं से अधिक उपयोगकर्ताबेस) – HitOdessit
ठीक है, धन्यवाद ..... – Rookie