2010-11-23 7 views
7

मुझे वर्तमान में एक समस्या का सामना करना पड़ रहा है जहां मुझे एंड्रॉइड डिवाइस पर अपनी ऑब्जेक्ट संरचना को स्टोर करना चाहिए।एंड्रॉइड उपकरणों पर बड़े एप्लिकेशन डेटा को स्टोर करने के लिए कहां?

उपयोगकेस: मैं एक एप्लिकेशनसेवर को कॉल कर रहा हूं (AsyncTask की महान सहायता के साथ), सर्वर से एक अच्छी तरह से ज्ञात प्रतिक्रिया (xml-response) प्राप्त करें, डेटा पार्स करें और अंत में इसे मेरी ऑब्जेक्ट संरचना में बदलें (कक्षाओं के बीच कई संगठनों के साथ अत्यधिक जटिल वर्ग आरेख)। अब तक यह काम कर रहा है, महान XMLPullParser के लिए धन्यवाद;) मैं सोच रहा हूं कि मेरी गतिविधियों के बीच प्राप्त डेटा को स्टोर करना (और निश्चित रूप से साझा करना) ... मुझे पहले से ही पता है कि मैं स्क्लाइट का उपयोग कर सकता हूं, लेकिन मेरे पास कोई नहीं है या मैपर (जे 2 पर्यावरण में हाइबरनेट की तरह)। मुझे इस संवेदनशील डेटा को डिवाइस (स्क्लाइट या फ़ाइल सिस्टम में) पर स्टोर करने की भी अनुमति नहीं है, इसलिए मेरा पहला दृष्टिकोण इस डेटा को सिंगलटन में संग्रहीत करना था (जो मेमोरी में आयोजित होने वाले cource का है ...)। लेकिन जब सिस्टम कम स्मृति पर हो रहा है, तो क्या होता है, एंड्रॉइड मेरे सिंगलटन में संग्रहीत डेटा को "नष्ट" कर सकता है? मैंने पहले से ही android.app.Application कक्षा को विस्तारित करने के बारे में पढ़ा है ... तो एंड्रॉइड उपकरणों पर ऑब्जेक्ट डेटा ("webservice" से सुरक्षित) को सुरक्षित रूप से संग्रहीत करने का सबसे अच्छा तरीका क्या है?

बीटीडब्ल्यू: एंड्रॉइड विकास इतना अच्छा है! वर्तमान में हम एंड्रॉइड और आईफोन के लिए एक विंडोज मोबाइल 6.5 ऐप पोर्ट कर रहे हैं, और मेरे सहयोगी (आईफोन-देव के लिए प्रतिलिपि) हर समय शिकायत कर रहे हैं ^^

उत्तर

2

एक या मैपर के संबंध में, मैं दूसरे दिन OrmLite पर आया। यह जावा के लिए एक सामान्य ओआरएम उपकरण है, लेकिन इसमें कुछ विशेष अनुकूलन भी हैं जो इसे Android के लिए काम करते हैं। मेरे पास अभी तक परीक्षण करने का समय नहीं है, लेकिन यह आशाजनक लग रहा है :)

फ़ोन पर संवेदनशील डेटा संग्रहीत करने के लिए, आपके पास वास्तव में केवल स्मृति में संग्रहीत करने का विकल्प नहीं है (किसी प्रकार का उपयोग करके जैसा कि आपने सुझाव दिया सिंगलटन)। जैसे ही आपका एप्लिकेशन पृष्ठभूमि में जाता है, इसे तत्काल मार दिया जा सकता है, इसलिए में है जो कि आप जिस डेटा को रखना चाहते हैं उसे बनाए रखने के लिए। ऐसा कहा जा रहा है कि, यदि आप Internal Storage पर डेटा सहेजते हैं, तो यह फोन पर किसी अन्य ऐप के लिए उपलब्ध नहीं होगा (यह देखते हुए कि फोन रूट नहीं है, क्योंकि यदि रूट है तो यह चारों ओर घूमना आसान है)। मुझे विश्वास है कि यह SQL डेटा का उपयोग करके आपके द्वारा संग्रहीत डेटा के लिए जाता है, लेकिन मैं 100% निश्चित नहीं हूं, इसलिए मैं इसकी गारंटी नहीं दूंगा।

लेकिन मूल रूप से, यदि आप सुनिश्चित हैं कि आपका ऐप केवल गैर-रूट डिवाइस पर ही चलाएगा, तो आपको अपने डेटा को आंतरिक संग्रहण में सुरक्षित रखना चाहिए। और यदि यह पर्याप्त नहीं है, तो javax.crypto पैकेज है, लेकिन मैंने इसका कभी भी उपयोग नहीं किया है, इसलिए मैं इसके बारे में कुछ भी नहीं कह सकता।

+1

हाय नेलुज, आपके विस्तृत उत्तर के लिए धन्यवाद! तो मुझे लगता है कि एंड्रॉइड.एप.प्लिकेशंस क्लास को विस्तारित करके डेटा स्टोर करना एकमात्र तरीका है क्योंकि यह एकमात्र मौका है जहां मैं कम स्मृति पर डेटा सुरक्षित रूप से "सुरक्षित रूप से" संग्रहीत कर सकता हूं (एक सिंगलटन के अपने कार्यान्वयन का उपयोग करके पता नहीं चलेगा जब सिस्टम आवेदन को मारता है)। डेटा को क्रमबद्ध करने और उन्हें फाइल सिस्टम में javax.crypto के साथ स्टोर करने और स्मृति उपलब्ध होने पर उस डेटा को फिर से लोड करने के बारे में क्या है (या एप्लिकेशन स्थिति बहाल की गई है)? –

+1

@ tim.kaufner: हाँ, यही कारण है कि मैंने 'javax.crypto' का उल्लेख किया है। यदि कुछ भी "सुरक्षित पर्याप्त" समाधान नहीं है, तो आप इसका उपयोग अपने डेटा को एन्क्रिप्ट करने और इसे आंतरिक संग्रहण (या उस मामले के लिए SQLite डेटाबेस) में संग्रहीत करने के लिए कर सकते हैं। इसके अलावा आप एन्क्रिप्शन/डिक्रिप्शन की एक अतिरिक्त परत जोड़ते हैं, यह वास्तव में किसी भी एंड्रॉइड एप्लिकेशन में राज्य को संभालने के तरीके के लिए बिल्कुल अलग नहीं है (किसी भी डेटा को जारी रखें जिसे आप 'रोकें)' में रखना चाहते हैं और इसे ' ऑनक्रेट() 'आदि)। – Nailuj

+1

मैं इसे आज़मा दूंगा :) OrmLite लाइब्रेरी का उल्लेख करने के लिए भी धन्यवाद, मुझे नहीं पता था कि "पोर्टेबल" या मैपर था, लेकिन मैं बाहरी सिस्टम पर फाइल सिस्टम या (अगर घुड़सवार) पर डेटा संग्रहीत करना पसंद करता हूं, कार्ड। लेकिन मुझे यकीन नहीं है कि इस तरह के उपकरणों पर बड़े ऑब्जेक्ट सेट का क्रमबद्ध/deserialize तेजी से है ... मैं कोशिश करूँगा और देखें कि क्या होता है :) –