Apres investigations, en fait ce qui se passe, c est qu il doit y avoir un probleme de synchronisation :
En effet, dans le comportement normal (et qui marche), lorsqu'on appuit sur le bonton "check for updates" qui appelle la fonction checkUpdate du applicationUpdater :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
|
/**
* check if there are any updates available
*/
public function checkUpdate () : void {
this.appUpdater = new ApplicationUpdaterUI();
//we can hide the dialog asking for permission for checking for a new update
this.appUpdater.isCheckForUpdateVisible = false;
//force the display of the download dialog box
this.appUpdater.isDownloadUpdateVisible = this.appUpdater.isDownloadProgressVisible = true;
// if the check up is automatic, then isInstallUpdateVisible is set to true and the dialog box for installing the update will be visible
this.appUpdater.isInstallUpdateVisible = !isAutomaticCheckUpdates;
this.appUpdater.isFileUpdateVisible = true;
logger.info("checkUpdate : isDownloadUpdateVisible = " + this.appUpdater.isDownloadUpdateVisible + "isDownloadProgressVisible = " + this.appUpdater.isDownloadProgressVisible);
//we set the event handlers for INITIALIZED and ERROR
this.appUpdater.addEventListener(UpdateEvent.INITIALIZED, onInitialized);
this.appUpdater.addEventListener(StatusUpdateEvent.UPDATE_STATUS, onUpdateStatus);
this.appUpdater.addEventListener(UpdateEvent.CHECK_FOR_UPDATE, onCheckForUpdate);
this.appUpdater.addEventListener(DownloadErrorEvent.DOWNLOAD_ERROR, onDownloadError);
this.appUpdater.addEventListener(StatusFileUpdateErrorEvent.FILE_UPDATE_ERROR, onFileUpdateError);
this.appUpdater.addEventListener(ErrorEvent.ERROR,onError);
var updateUrl:String = "dossier/updates/updateDescriptor.xml";
this.appUpdater.updateURL = updateUrl;
//initialization of the updater
this.appUpdater.initialize();
}
public function onInitialized (event:UpdateEvent) : void {
// updater initialized, now start update
this.appUpdater.checkNow();
}
public function onUpdateStatus (event:StatusUpdateEvent) : void {
if (!this.automaticCheckUpdates && !event.available){
Alert.show('INFO_UPDATE_NOT_AVAILABLE','ACT_UPDATE');
} |
La fonction checkUpdates est donc appelée, puis onInitialized et donc la methode checkNow de l'application updater. Suite a cela, une fonction "enterFrameHandler" de WindowedApplication est appelée, dans laquelle se trouve la ligne suivante :
stage.nativeWindow.visible = _nativeWindowVisible
.
_nativeWindowVisible est false, mais comme la fenetre de download n est pas encore affiché, il n y pas d impact, et la fonction onUpdateStatus est enfin appelée.
Le probleme de synchronisation (je pense) se pose car parfois, on arrive dans onUpdateStatus avant que la methode de WindowedAplication soit appelée. Du coup, comme la fenetre de download est deja créée, le bout de code (sur la visibilité de la nativeWindow) fait disparaitre la fenetre.
Une idee de comment resoudre la chose ?
Petit resumé :
checkNow();
WindowedApplication enterFrameHandler function
OnUpdateStatus
= OK
checkNow();
OnUpdateStatus
WindowedApplication enterFrameHandler function
= NOT OK
Partager