从内容提供商将数据加载到webview会导致内存泄漏

时间:2012-03-24 12:17:45

标签: android memory webview memory-leaks

使用带有webview的内容提供程序时遇到问题,基本上它会导致内存泄漏。

当我通过http Vs content://加载相同的内容时,我可以清楚地看到这一点 - 当使用http和强制垃圾收集时,使用是静态的,但是当使用内容提供程序并强制垃圾收集时,我得到了这个:

GC_EXPLICIT freed 304K, 6% free 23582K/24839K, paused 3ms+5ms
页面重新加载后

GC_EXPLICIT freed 304K, 5% free 24607K/25863K, paused 15ms+25ms

将此识别为我的泄漏是我试图插上它..

如何在重新加载webview或加载其他页面时强制释放通过提供程序加载的内容。

内容提供商是标准的fayre:

public class LocalFileContentProvider extends ContentProvider {
   private static final String URI_PREFIX = "content://com.content.mine";

   public static String constructUri(String url) {
       Uri uri = Uri.parse(url);
       return uri.isAbsolute() ? url : URI_PREFIX + url;
   }

   @Override
   public ParcelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException {

       SharedPreferences app_preferences = PreferenceManager.getDefaultSharedPreferences(getContext());

            try {
                File file = new File(uri.getPath());

                if (file.isDirectory())
                    return null;

                ParcelFileDescriptor parcel = ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY);
                return parcel;
            } catch (Exception e) {
                return null;
            }

   }

   @Override
   public boolean onCreate() {
       return true;
   }

   @Override
   public int delete(Uri uri, String s, String[] as) {
       throw new UnsupportedOperationException("Not supported by this provider");
   }

   @Override
   public String getType(Uri uri) {
       throw new UnsupportedOperationException("Not supported by this provider");
   }

   @Override
   public Uri insert(Uri uri, ContentValues contentvalues) {
       throw new UnsupportedOperationException("Not supported by this provider");
   }

   @Override
   public Cursor query(Uri uri, String[] as, String s, String[] as1, String s1) {
       throw new UnsupportedOperationException("Not supported by this provider");
   }

   @Override
   public int update(Uri uri, ContentValues contentvalues, String s, String[] as) {
       throw new UnsupportedOperationException("Not supported by this provider");
   }

}

使用垫我可以看到

Label   Number of Objects   Used Heap Size  Retained Heap Size
byte[] First 10 of 483 objects  483 15,834,672  15,834,672

并查看对象,这似乎是保留的网页内容。

0 个答案:

没有答案