طريقة جيدة لتخزين البيانات أثناء دورة حياة تطبيق Android؟

StackOverflow https://stackoverflow.com/questions/2676280

  •  28-09-2019
  •  | 
  •  

سؤال

الحفاظ على سؤالي قصيرًا ، قمت بإنشاء تطبيق مع 3 أنشطة ، حيث A - قائمة بالفئات ، B - قائمة العناصر ، C - عنصر واحد. يتم تحليل البيانات المعروضة في B و C من XML عبر الإنترنت. ولكن ، إذا ذهبت من خلال A -> B1 -> C ، ثم عدت إلى A ثم العودة إلى B1 ، أود أن يتم تخزين بياناتها في مكان ما ، لذا لن أضطر إلى طلب XML مرة أخرى.

أنا جديد على برمجة Android و Java ، لقد غوغل كثيرًا وما زلت لا أجد (أو ببساطة ليس لدي فكرة من أين ننظر) طريقة للقيام بما أريد.

هل سيخزن جميع البيانات المستلمة في النشاط الرئيسي A (hashmaps؟ contentProviders؟) ثم الانتقال إلى B و C (إذا حصلوا على نفس الطلب الذي كان من قبل) يكون فكرة جيدة؟

هل كانت مفيدة؟

المحلول

طريقة بسيطة وسريعة لتخزين المعلومات أو تتبع حالة التطبيق ، هي تمديد طلب كما هو موضح في منشور المدونة هذا.

ينسى منشور المدونة هذا أن يضيف أنه يجب عليك تعيينك تطبيق مخصص الفصل في البيان ، مثل:

<application [...] android:name="CustomApplication">

في مشاريعي ، التزم بأسلوب Singleton عبر GetInstance.

المزيد من الموارد: هذا الجواب, المتغيرات العالمية في تطبيقات Android و منشور المدونة هذا.

نصائح أخرى

إذا كنت ترغب في إنشاء نوع من ذاكرة التخزين المؤقت على الذاكرة ، ففكر في استخدام خريطة مع SoftReferences. تعتبر Softreferences نوعًا من المراجع التي تميل إلى الحفاظ على بياناتك لفترة من الوقت ، لكنها لا تمنعها من جمع القمامة.

الذاكرة على الهاتف الخلوي نادرة ، لذلك قد لا يكون الحفاظ على كل شيء في الذاكرة عملية. في هذه الحالة ، قد ترغب في حفظ ذاكرة التخزين المؤقت على التخزين الثانوي للجهاز.

تحقق من صانع الخرائط من مجموعات Google, ، مما يتيح لك بناء ذاكرة التخزين المؤقت من مستويين مريحة. فكر في القيام بذلك:

/** Function that attempts to load data from a slower medium */
Function<String, String> loadFunction = new Function<String, String>() {
    @Override
    public String apply(String key) {
        // maybe check out from a slower cache, say hard disk
        // if not available, retrieve from the internet
        return result;
    }
};

/** Thread-safe memory cache. If multiple threads are querying
*   data for one SAME key, only one of them will do further work.
*   The other threads will wait. */
Map<String, String> memCache = new MapMaker()
                                .concurrentLevel(4)
                                .softValues()
                                .makeComputingMap(loadFunction);

حول ذاكرة التخزين المؤقت على التخزين الثانوي للجهاز ، تحقق من context.getCachedir (). إذا كنت قذرة مثلي ، فما عليك سوى ترك كل شيء هناك وآمل أن يقوم النظام بتنظيف الأشياء لك عندما يحتاج إلى مساحة أكبر: P

يمكنك الاستفادة من تخزين البيانات كما هو موضح في مرجع Android هنا http://developer.android.com/guide/topics/data/data-storage.html

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top