10
votes

Android Clear webview thread, mémoire libre, évitez OutofMemoryError

J'affiche une image assez importante dans une vision Web afin que les fonctions de zoom arrière et d'autres commodités de visualisation soient déjà disponibles.

Il s'affiche correctement la première fois. Mais après avoir quitté l'activité et y retourner, l'application se bloque sur une sortie supérieure liée au thread webview. P>

J'ai essayé plusieurs choses pour essayer de fermer la vision webview ou d'arrêter le fil ou d'effacer son utilisation. de mémoire, mais en vain. Voici des exemples de code que j'ai ajouté à mes activités ' Onstop () Code> Fonction P>

    wv.stopLoading();
    wv.clearCache(true);
    //removeView(wv);
    wv.clearView();
    wv.freeMemory();
    wv.destroy();
    try {
        Class.forName("android.webkit.WebView").getMethod("onPause", (Class[]) null).invoke(wv, (Object[]) null);
    } catch (IllegalArgumentException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (SecurityException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (InvocationTargetException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (NoSuchMethodException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (ClassNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }


5 commentaires

Lorsque vous quittez l'appel d'activité webview.destroy () . Vous pouvez le faire en détruisant le webview dans le OnDestroy () de votre activité


N'a pas fonctionné. vide protégé ondestroy () {super.ondestroy (); wv.destroy (); } TOUJOURS GOT OUTOFMORYError lorsque j'ai chargé l'activité une seconde fois.


hmmm .. Essayez de supprimer le code de votre Onstop () Méthode. et essayez de détruire votre Webview avant d'appeler super.ondetroy ()


Cela n'a aucune influence non plus :(


+1 Ce code de nettoyage était très utile


3 Réponses :


2
votes

Peut-être essayer de recycler le bitmap / image?

Si cela ne fonctionne pas, je vous suggère de la réémarrer.

Strange hors de mémoire lors du chargement d'une image sur un objet bitmap


3 commentaires

Je tire mon image vers le bas comme une chaîne cryptée. Aucune fonction bitmap n'est appelée. Le WebView utilise la fonction LoadData avec le mimeType approprié.


ReadwritechaRarraRaybuffer n'alloue pas assez de mémoire sur la seconde partie. (L'image est disponible en tant que chaîne) Comment allouer ... 1024000 de mémoire


Vous ne pouvez pas attribuer la mémoire sur le périphérique Android. Je me souviens de la session de Googleoo dans laquelle Romain Guy était comme "Tu ne sais jamais combien de mémoire votre application va tellement utiliser aussi peu que possible tout le temps". Cela dit, il pourrait s'agir d'une longue chaîne avec un énorme processus de décryptage? Essayez de finaliser () quelques trucs là-bas peut-être? Ou appelez un système.gc () juste avant de charger votre webview?



3
votes

D'accord, la conclusion à ce sujet était que le tampon à cordes ne pouvait pas être prédéterminé ou correctement effacé à ces tailles de ces fichiers.

Dans ce cas, l'image a été tirée d'un serveur sous forme de chaîne, manipulée en tant que chaîne et enfin affiché comme une image.

Si affiché comme une vue d'écran ou comme webview, cela n'a pas d'importance, l'application s'écraserait une fois qu'un tampon à chaîne est devenu plein (ce qui ne ferait pas clairement que peu importe la quantité de choses que j'ai libérée ou réglée à NULL), c'était un effort de cryptage.

mais finalement simplement installé avec stocker les images dans le dossier d'actifs de l'application.


1 commentaires

@Pablo J'utilise UrlimageViewHelper sur Github, j'ai également contribué à ce projet



2
votes

Une voie efficace de tous les temps:

webviefactivitacit.java xxx

active_web_view.xml < Pré> xxx

androidmanifest.xml xxx

espère que cela vous aidera.


0 commentaires