मैं एंड्रॉयड सर्वोत्तम प्रक्रियाओं का पालन करने के लिए है, तो डिबग मोड में मैं बारी कोशिश कर रहा हूँ सब पर निम्नलिखित:क्या एसक्यूएल या सामान्य फ़ाइल का उपयोग एंड्रॉइड मुख्य यूआई थ्रेड में उचित है?
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectAll().penaltyLog().build()); //detect and log all thread violations
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder().detectAll().penaltyLog().build()); //detect and log all virtual machine violations
एंड्रॉयड अब मुझे पर चिल्लाता है जब मैं मुख्य में फ़ाइल पहुँच या SQL किसी भी प्रकार का उपयोग करने का प्रयास (यूआई) धागा। लेकिन मुझे मुख्य थ्रेड में फ़ाइल एक्सेस और/या एसक्यूएल का उपयोग करने के लिए कई सिफारिशें दिखाई देती हैं। उदाहरण के लिए, मुख्य गतिविधि मामले में onCreate()
अंदर डिफ़ॉल्ट प्राथमिकता मान लोड करना चाहिए वे अभी तक निर्धारित नहीं किया गया:
PreferenceManager.setDefaultValues(context, resId, readAgain);
उफ़ --- कि पहले आवेदन निष्पादन पर एक फ़ाइल उपयोग में परिणाम है, क्योंकि onCreate()
कहा जाता है यूआई थ्रेड पर। इसके आस-पास एकमात्र तरीका यह है कि मैं एक अलग थ्रेड शुरू करना चाहता हूं --- जो अन्य यूआई कोड के साथ दौड़ की स्थिति पेश करता है जो प्राथमिकताओं को पढ़ सकता है और डिफ़ॉल्ट मानों को पहले से सेट करने की अपेक्षा करता है।
DownloadManager जैसी सेवाओं के बारे में भी सोचें। (वास्तव में, यह इतना है कि यह गाड़ी वास्तविक जीवन में बेकार है, लेकिन यह एक पल के लिए काम करता है नाटक करते है।) यदि आप एक डाउनलोड अप कतार हैं, तो आप एक घटना (मुख्य थ्रेड पर) प्राप्त तुमसे कह एक डाउनलोड समाप्त हो। वास्तव में जो डाउनलोड के बारे में जानकारी (यह केवल आप एक डाउनलोड आईडी देता है), तो आप DownloadManager --- जो एक कर्सर शामिल है, तो आपको एक त्रुटि दे रही है यदि आप एक सख्त नीति को चालू किया हुआ क्वेरी करने के लिए है पाने के लिए।
तो कहानी क्या है --- क्या मुख्य धागे में कर्सर तक पहुंचना ठीक है? या यह एक बुरी चीज है, और आधे एंड्रॉइड डेवलपमेंट टीम और एंड्रॉइड पुस्तक लेखकों ने इसके बारे में भूल गए हैं?
वरीयता प्रबंधक .setDefaultValues में SQL शामिल नहीं है। साझा संदर्भ सभी फ्लैट एक्सएमएल फाइलें हैं। –
हाँ, यह एक सप्ताह रहा है --- मुझे याद नहीं आया। मैंने इस सवाल को संपादित करने के लिए संपादित किया है कि यह एक फ़ाइल पहुंच --- जो एक ही बिंदु है। इसे नोट करने के लिए धन्यवाद। –
अब एंड्रॉइड 4.2.2 एमुलेटर पर, 'वरीयता प्रबंधक .setDefaultValues (संदर्भ, resId, readAgain)' का प्रयोग करते हुए, एक थ्रेड थ्रेड से शुरू होने पर, जो मुख्य थ्रेड _not_ है, गतिविधि को लंबे समय तक स्टैक ट्रेस के साथ "जावा" से भरने से रोक देगा। lang.RuntimeException: थ्रेड के अंदर हैंडलर नहीं बना सकता जिसे Looper.prepare() "नहीं कहा जाता है। तो ऐसा लगता है कि, मुख्य धागे पर फ़ाइलों तक पहुंचने के लिए न केवल ठीक है, अब डिफ़ॉल्ट वरीयता मानों को सेट करने के लिए अब तक अनिवार्य है। –