Comment puis-je décharger un de l'extérieur fichier SWF chargé à partir d'un composant SWFLoader dans Adobe Flex?
J'ai une application qui se charge des fichiers SWF externes et les joue à l'intérieur d'une Adobe Flex /Air application via le SWFLoader composant Flex. J'ai essayé de trouver un moyen de les décharger à partir d'un événement de clic de bouton. J'ai Google avait beaucoup et personne ne semble avoir été en mesure de le faire sans un hack. La combinaison de code que j'ai de voir des gens à utiliser est:
swfLoader.source = ""; //Removes the external link to the SWF.
swfLoader.load(null); //Forces the loader to try to load nothing.
//Note: At this point sound from the SWF is still playing, and
//seems to still be playing in memory.
flash.media.SoundMixer.stopAll();
//Stops the sound. This works on my development machine, but not
//on the client's.
Si les fonds souverains sont fermés (caché) de cette façon, finalement, le programme se bloque.
Des idées? J'ai trouvé des tonnes de messages dans les différents forums avec des personnes ayant le même problème. Je suppose que je vais avoir un mal/réponse incomplète ici, et que mon post va sombrer dans le néant comme d'habitude, mais de toute façon, merci d'avance!
Edit 1: je ne peux pas modifier le réel de films SWF, elles sont créées par le client. Si je ne peux pas fermer SWF ouvert par le biais de Flex, n'est-ce pas un problème avec l'architecture Flex? Est ma seule option envoyer les fichiers swf vers le navigateur web?
OriginalL'auteur Shawn | 2008-09-22
Vous devez vous connecter pour publier un commentaire.
Oui, il est, et il affecte également le Flash en général. Jusqu'à ce que vous pouvez prendre avantage de la Loader.unloadAndStop() méthode dans FP10 (AIR 1.5), vous ne pouvez pas garantir que de l'extérieur chargé de contenu ne va pas continuer à consommer de la mémoire et des ressources du processeur, même si vous utilisez le
Loader.unload()
méthode. (Pour être honnête, je ne suis pas sûr à 100% que cela va garantir la libération des ressources, mais peut-être que je suis un pessimiste.)La meilleure chose à faire est pour vous d'insister pour que les créateurs de contenu que vous chargez le respect d'un ensemble de lignes directrices, y compris exposer quelque chose comme un
dispose()
méthode qui votre application peut appeler pour lui demander de libérer les ressources autant que possible avant de vousunload()
. Si ce n'est pas possible, votre application sera presque certainement gonfler dans la mémoire et l'utilisation de l'uc à chaque fois que vous chargez un fichier swf externe. Désolé.Si il vous fait vous sentir mieux, vous n'êtes pas seul. 😉
Impair. Pouvez-vous développer? Peut-être même poser une question si l'on n'en existe pas déjà!
OriginalL'auteur aaaidan
C'est un problème que mal SWF peuvent couler votre application, et de nombreux problèmes avec ce problème sera corrigé dans Flash Player 10, comme d'autres l'ont mentionné. Cependant, indépendamment de la plateforme, vous aurez toujours le risque d'avoir des problèmes si vous en charger un tiers de code, il y a toujours la possibilité qu'elle contient des bugs, des fuites de mémoire ou carrément d'un code malveillant. À moins que vous pouvez charger le contenu dans un bac à sable (et vous ne pouvez pas en Flash, du moins pas encore), le chargement de mauvaises choses vont évier de votre application, c'est aussi simple que cela.
Je suis désolé de le dire, sauf si vous pouvez garantir la qualité du contenu chargé, vous ne pouvez pas garantir la qualité de votre propre application. Les développeurs Flash sont connus pour écrire des choses qui fuite, ou ne peut pas être déchargé, parce que Flash le rend facile de faire la mauvaise chose, surtout pour les choses qui sont sur la ligne de temps. Chargement du contenu Flash que vous n'avez pas de contrôle sur directement est très périlleux.
OriginalL'auteur Theo
La meilleure solution est
De cette façon, vous arrêter le lecteur, décharger le contenu de la mémoire et éviter que le son restent à jouer.
Cheers
OriginalL'auteur Yury Euceda
Le problème réside dans le fichier swf, il suffit simplement de ne pas nettoyer l'audio après lui-même.
Essayez de fixer un événement de déchargement sur movieclips comme ceci:
OriginalL'auteur user19264
Je préfère généralement rester à l'écart de SWFLoader et utiliser les classes de la mx.paquet pour les modules.
Flex dispose d'un module du système qui permet à ce type de comportement. Vous pouvez le vérifier ici : http://livedocs.adobe.com/flex/3/html/help.html?content=modular_3.html . En général, dynamique de chargement et de déchargement swf composants est délicat, surtout si ces modules de modifier tout état global de l'application (styles, etc..). Mais si vous créez une interface pour vos modules, puis chaque classe de chargement/déchargement à implémenter cette interface ainsi que d'étendre le module flex classe, vous pouvez charger et décharger proprement.
OriginalL'auteur
Essayez ce qui suit:
Qui va forcer un Garbage Collection de routine. Si votre fichier SWF est encore attaché, alors vous avez raté une sorte de connexion, comme l'audio.
Il ya un couple de façons de force GC, toutes sortes de sucer parce qu'ils spike CPU, mais la bonne nouvelle est qu'un moyen officiel est à venir dans Flash Player 10:
lien: http://www.gskinner.com/blog/archives/2008/07/unloadandstop_i.html
Jusqu'alors, je crains que vous aurez à le forcer avec des hacks comme je l'ai montré ci-dessus.
OriginalL'auteur Brent
Vous n'avez pas montré à tous de votre code, donc je vais supposer que vous n'utilisez pas la décharger de la méthode de la classe Loader. Aussi swfLoader.charge(null) semble mauvais pour moi que la méthode de chargement attend un objet URLRequest. Lorsque vous voulez nettoyer les choses jusqu'à la fin, définir l'objet de la valeur null au lieu d'appeler un null charge. Le fait que votre écoute audio indique que vos données n'ont pas été déchargés, ou le fichier audio n'a pas résider à l'intérieur du contenu qui a été déchargé. Permet de marcher à travers ce.
Exemple ci-dessous
J'espère que cela a été utile, et je suis désolé si c'est redondant, mais sans voir ton code je n'ai aucun moyen de savoir exactement comment vous abordé cette.
OriginalL'auteur Brian Hodge