浏览代码

Thumbnails cache initialized in MainApp context to grant it is done even if the app wasn't opened, for the case of background synchronizations

David A. Velasco 10 年之前
父节点
当前提交
299ad36bb8
共有 2 个文件被更改,包括 25 次插入18 次删除
  1. 4 0
      src/com/owncloud/android/MainApp.java
  2. 21 18
      src/com/owncloud/android/datamodel/ThumbnailsCacheManager.java

+ 4 - 0
src/com/owncloud/android/MainApp.java

@@ -19,6 +19,7 @@ package com.owncloud.android;
 import android.app.Application;
 import android.content.Context;
 
+import com.owncloud.android.datamodel.ThumbnailsCacheManager;
 import com.owncloud.android.lib.common.OwnCloudClientManagerFactory;
 import com.owncloud.android.lib.common.OwnCloudClientManagerFactory.Policy;
 import com.owncloud.android.lib.common.utils.Log_OC;
@@ -55,6 +56,9 @@ public class MainApp extends Application {
             OwnCloudClientManagerFactory.setDefaultPolicy(Policy.ALWAYS_NEW_CLIENT);
         }
         
+        // initialise thumbnails cache on background thread
+        new ThumbnailsCacheManager.InitDiskCacheTask().execute();
+        
         if (BuildConfig.DEBUG) {
 
             String dataFolder = getDataFolder();

+ 21 - 18
src/com/owncloud/android/datamodel/ThumbnailsCacheManager.java

@@ -50,7 +50,7 @@ public class ThumbnailsCacheManager {
     private static final String CACHE_FOLDER = "thumbnailCache"; 
     
     private static final Object mThumbnailsDiskCacheLock = new Object();
-    private static DiskLruImageCache mThumbnailCache;
+    private static DiskLruImageCache mThumbnailCache = null;
     private static boolean mThumbnailCacheStarting = true;
     
     private static final int DISK_CACHE_SIZE = 1024 * 1024 * 10; // 10MB
@@ -68,23 +68,26 @@ public class ThumbnailsCacheManager {
         @Override
         protected Void doInBackground(File... params) {
             synchronized (mThumbnailsDiskCacheLock) {
-                try {
-                    // Check if media is mounted or storage is built-in, if so, 
-                    // try and use external cache dir; otherwise use internal cache dir
-                    final String cachePath = 
-                            MainApp.getAppContext().getExternalCacheDir().getPath() + 
-                            File.separator + CACHE_FOLDER;
-                    Log_OC.d(TAG, "create dir: " + cachePath);
-                    final File diskCacheDir = new File(cachePath);
-                    mThumbnailCache = new DiskLruImageCache(
-                            diskCacheDir, 
-                            DISK_CACHE_SIZE, 
-                            mCompressFormat, 
-                            mCompressQuality
-                    );
-                } catch (Exception e) {
-                    Log_OC.d(TAG, "Thumbnail cache could not be opened ", e);
-                    mThumbnailCache = null;
+                mThumbnailCacheStarting = true;
+                if (mThumbnailCache == null) {
+                    try {
+                        // Check if media is mounted or storage is built-in, if so, 
+                        // try and use external cache dir; otherwise use internal cache dir
+                        final String cachePath = 
+                                MainApp.getAppContext().getExternalCacheDir().getPath() + 
+                                File.separator + CACHE_FOLDER;
+                        Log_OC.d(TAG, "create dir: " + cachePath);
+                        final File diskCacheDir = new File(cachePath);
+                        mThumbnailCache = new DiskLruImageCache(
+                                diskCacheDir, 
+                                DISK_CACHE_SIZE, 
+                                mCompressFormat, 
+                                mCompressQuality
+                        );
+                    } catch (Exception e) {
+                        Log_OC.d(TAG, "Thumbnail cache could not be opened ", e);
+                        mThumbnailCache = null;
+                    }
                 }
                 mThumbnailCacheStarting = false; // Finished initialization
                 mThumbnailsDiskCacheLock.notifyAll(); // Wake any waiting threads