سؤال

بلدي التطبيق يستخدم الكثير من الصور التي يتم تحميلها من الإنترنت مؤقتا محليا على الهاتف الروبوت.وأنا أتساءل ما هي الطريقة الصحيحة لحفظ تلك الصور.هناك العديد من الطرق التي ليست مرضية تماما.

وحفظها على بطاقة الذاكرة الرقمية المؤمنة في مجلد عمومي

  • يستخدم مساحة أنه لن يكون الافراج على إلغاء التثبيت
  • يمكن للمستخدم رؤية الحمار في معرض
  • يحتاج إلى مجلد على sdcard الجذر (يمكنك أن ترى ذلك في الواقع أثناء التصفح من الهاتف الخاص بك)

وحفظها على بطاقة الذاكرة الرقمية المؤمنة في غير المجلد العمومي

  • يستخدم مساحة أنه لن يكون الافراج على إلغاء التثبيت
  • سرا يستخدم مساحة على بطاقة الذاكرة الرقمية المؤمنة

وحفظها داخل التطبيق

  • يفجر حجم الطلب كثيرا

ما هي الطريقة الصحيحة محليا حفظ الصور من تطبيق لا يصرف المستخدم و لا تترك القمامة في أي مكان ؟

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

المحلول

أفضل حل هو استخدام:

context.getCacheDir()

هذا الدليل هو خاصة إلى التطبيق و سيتم حذف على إلغاء ذلك النظام يمكن حذفه من الدليل إذا كان الجهاز ينفد من الفضاء.

ملاحظة على الرغم من أن مستندات يقول:

يجب أن لا تعتمد على نظام حذف هذه الملفات بالنسبة لك ؛ لك ينبغي أن يكون دائما معقولة الحد الأقصى ، مثل 1 ميجا بايت ، كمية من المساحة التي تستهلك مع ذاكرة التخزين المؤقت الملفات ، و تقليم تلك الملفات عند تجاوز هذا الفضاء

إذا كنت تحتاج إلى الكثير من الفضاء و يفضل استخدام بطاقة SD يمكنك الاتصال

getExternalCacheDir()

بدلا من ذلك.هذه سوف تحصل أيضا على إزالة إلغاء التثبيت ، ولكن النظام لا مراقبة توفر مساحة في التخزين الخارجية ، لذلك لن تلقائيا حذف هذه الملفات اذا كان منخفض في الفضاء.في حالة استخدام هذا الخيار يجب عليك أيضا التحقق من أن التخزين الخارجية المتاحة مع

Environment.getExternalStorageState()

قبل محاولة الكتابة إليه.

نصائح أخرى

يمكنك إخفاء الصور من MediaScanner إذا كنت ووضعها في خفية dir (أي مع نقطة مسبوقة) مثل /sdcard/.donotscan/.

تحديث:كما romainguy يذكر على تويتر هذا يعمل أيضا إذا قمت بوضع ملف اسمه .nomedia في دير.

أعتقد أن أفضل طريقة هي استخدام قاعدة البيانات.

  1. لا تفجير تطبيق والذاكرة.
  2. ذات قاعدة البيانات المحذوفة مرة واحدة تم إلغاء تثبيت التطبيق.
  3. لا يمكن لأحد الوصول إلى هذه الملفات بالإضافة إلى التطبيق الخاص بك.

تحديث:ولكن ؛ إذا كنت ترغب في ذاكرة التخزين المؤقت البيانات فقط ، هناك إدارة التخزين المؤقت المحدد في بكت. CacheManager

لم أكن استخدام حزمة قبل ولكن الأساليب تبدو مستقيمة استخدام:

static boolean   cacheDisabled()
static boolean   endCacheTransaction()
static CacheManager.CacheResult  getCacheFile(String url, Map<String, String> headers)
static File  getCacheFileBaseDir()
static void  saveCacheFile(String url, CacheManager.CacheResult cacheRet)
static boolean   startCacheTransaction()

و يمكنك العثور على الاستخدام في جوجل التروس رمز

آمل أن يساعد هذا.

إذا كنت لا ترغب في استخدام CacheManager ثم استخدام قاعدة البيانات أو المحلية (غير SD) الملف (الملفات المحلية على حذف على إكمال إلغاء التثبيت) و سجل لتلقي 'ACTION_DEVICE_STORAGE_LOW" و "ACTION_DEVICE_STORAGE_OK' بث الإجراءات.ثم عليك أن تعرف عندما يكون التطبيق الخاص بك تأخذ مساحة كبيرة جدا وفقا الجهاز و عندما كنت في حاجة لبدء حذف الصور.التطبيق الخاص بك حجم لا تزال تنمو, ولكن سوف تكون قادرة على إدارة النمو والانكماش.

مجرد تلميح إذا كنت وحفظها على بطاقة الذاكرة الرقمية المؤمنة ، سيتم مسحها ضوئيا من قبل MediaScanner و سوف تظهر في المستخدمين معرض (الصور) التي ربما لا تريد.لذلك ربما كنت تريد تخزينها على الهاتف ، أو بطريقة ما اقول MediaScanner عدم مسح عليها (على ما يبدو من المستحيل بعد بحث جوجل سريع.)
ربما من الأفضل لتخزين قلة مختارة في التطبيق الخاص بك دليل خاص ، والتي سيتم إزالتها عند التطبيق الخاص بك يتم إلغاء تثبيت.

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