मैंने BackupAgentHelperउपलब्ध कराए FileBackupHelperगए बैकअप का उपयोग करके और मेरे पास मूल डेटाबेस को पुनर्स्थापित करने के लिए लागू किया है। यह वह डेटाबेस है जिसका आप आमतौर पर उपयोग करते हैं ContentProvidersऔर जो अंदर रहता है /data/data/yourpackage/databases/।
किसी को लगता है कि यह एक सामान्य मामला है। हालाँकि डॉक्स स्पष्ट नहीं है कि क्या करना है: http://developer.android.com/guide/topics/data/backup.html । इन विशिष्ट डेटाबेस के लिए कोई BackupHelperविशेष रूप से नहीं है। इसलिए मैंनेFileBackupHelper ".bb फ़ाइल" में इंगित किया , "। /databases/" में किसी भी db ऑपरेशन (जैसे कि db.insert) के चारों ओर ताले लगा दिए ContentProviders, और यहां तक कि " /databases/" निर्देशिका को पहले बनाने की कोशिश की onRestore()क्योंकि यह स्थापित होने के बाद मौजूद नहीं है।
मैंने SharedPreferencesअतीत में एक अलग ऐप में सफलतापूर्वक एक समान समाधान लागू किया है। हालाँकि जब मैं एमुलेटर -२.२ में अपने नए कार्यान्वयन का परीक्षण करता हूं, तो मुझे LocalTransportलॉग से प्रदर्शन किया जा रहा बैकअप दिखाई देता है , साथ ही एक पुनर्स्थापना (और onRestore()कहा जाता है) भी किया जाता है। फिर भी, db फ़ाइल ही कभी नहीं बनाई जाती है।
ध्यान दें कि यह सब एक इंस्टालेशन के बाद है, और ऐप के पहले लॉन्च से पहले, रिस्टोर होने के बाद। इसके अलावा मेरी परीक्षण रणनीति http://developer.android.com/guide/topics/data/backup.html#Testing पर आधारित थी ।
कृपया यह भी ध्यान दें कि मैं अपने द्वारा प्रबंधित कुछ साइक्लाइट डेटाबेस के बारे में बात नहीं कर रहा हूं, न ही एसडीकार्ड, स्वयं के सर्वर या अन्य जगहों पर बैकअप लेने के बारे में।
मैंने कस्टम का उपयोग करने की सलाह देने वाले डेटाबेस के बारे में डॉक्स में एक उल्लेख देखा, BackupAgentलेकिन यह संबंधित नहीं लगता है:
हालाँकि, यदि आप की जरूरत है तो आप सीधे BackupAgent का विस्तार कर सकते हैं: * डेटाबेस में डेटा का बैकअप लें। यदि आपके पास एक SQLite डेटाबेस है जिसे आप तब पुनर्स्थापित करना चाहते हैं जब उपयोगकर्ता आपके एप्लिकेशन को फिर से इंस्टॉल करता है, तो आपको एक कस्टम बैकअपअर्जेंट बनाने की आवश्यकता होती है जो बैकअप ऑपरेशन के दौरान उपयुक्त डेटा पढ़ता है, फिर अपनी तालिका बनाएं और पुनर्स्थापना कार्रवाई के दौरान डेटा डालें।
कुछ स्पष्टता कृपया।
अगर मुझे वास्तव में इसे SQL स्तर तक स्वयं करने की आवश्यकता है, तो मैं निम्नलिखित विषयों के बारे में चिंतित हूं:
डेटाबेस और लेनदेन खोलें। मुझे नहीं पता कि मुझे अपने ऐप के वर्कफ़्लो के बाहर ऐसे एकल वर्ग से कैसे बंद करना है।
उपयोगकर्ता को कैसे सूचित किया जाए कि एक बैकअप प्रगति पर है और डेटाबेस लॉक है। इसमें लंबा समय लग सकता है, इसलिए मुझे एक प्रगति बार दिखाने की आवश्यकता हो सकती है।
पुनर्स्थापना पर समान कैसे करें। जैसा कि मैं समझता हूं, पुनर्स्थापना बस तब हो सकती है जब उपयोगकर्ता पहले ही ऐप का उपयोग करना शुरू कर चुका है (और डेटाबेस में डेटा इनपुट कर रहा है)। इसलिए आप केवल बैक किए गए डेटा को पुनः स्थापित करने (खाली या पुराने डेटा को हटाने) के लिए नहीं मान सकते हैं। आपको किसी तरह इसमें शामिल होना होगा, जो आईडी के कारण किसी भी गैर-तुच्छ डेटाबेस के लिए असंभव है।
पुनर्स्थापना के बाद एप्लिकेशन को कैसे रिफ्रेश किया जाए, उपयोगकर्ता को बिना कुछ प्राप्त किए - अब - अप्राप्य बिंदु।
क्या मुझे यकीन है कि डेटाबेस को पहले से ही बैकअप या पुनर्स्थापना पर अपग्रेड किया गया है? अन्यथा अपेक्षित स्कीमा मेल नहीं खा सकती है।