Quels sont les (breaking) changes pour les Apps Windows 8.1 XAML ?
Maintenant que Florent vous a mis l’eau à la bouche, vous voulez mettre à jour votre appli vers Windows 8.1 : mais quels sont les changements d’APIs à connaître ?
En réalité il y en a très peu et il s’agit surtout de mettre à jour votre code pour prendre en compte le fait que le device peut avoir plusieurs écrans. Quelques mise à jour à faire aussi si vous utilisez des parties spécifiques des templates des contrôles du Framework, notamment les GridView et Listview.
Il est bon je pense de synthétiser un peu ces informations pour en avoir un aperçu. C’est parti !
Voici une liste non exhaustive des changements majeurs :
- Weak References : le fonctionnement du Garbage Collector a évolué et vos WeakReferences peuvent être collecté plus tôt que précédemment. Elles vous retourneront donc null.
- Gestion des erreurs : toutes les exceptions non traitées sont maintenant fatales pour l’application. Il y a deux façons de les traiter : l’événement classique App.UnhandledException pour une app Xaml et le nouveau CoreApplication::UnhandledErrorDetected. Vous pouvez choisir celui que vous souhaitez.
- Vitesse de traitement de l’handler de suspension : Lorsque votre application passe en mode “suspendu”, vous aviez 5 secondes de traitement pour sauvegarder son état. Dorénavant vous avez toujours une durée CPU équivalente mais le processus sera executé avec une priorité basse.
- Taches de fond (background task): les parmètres(TaskEntryPoint, Name, etc.) sont dorénavants vérifiés au moment de l’enregistrement et non plus à l’éxecution : vous le saurez donc tout de suite s’il ne sont pas bons mais cela fera crasher votre app. Plutôt positif en réalité comme changement.
- Support du multi-écrans amélioré : Etant donné que le support du mutli écran est amélioré, certaines APIs (notamment DisplayProperties) ne prenant précédemment en compte qu’un seul écran vont continuer à fonctionner mais retourneront des informations potentielement éronées. Pour corriger cela, vous devrez mettre en place une logique déterminant sur quel écran se trouve l’objet pour lequel vous souhaitez avoir une information.
- Dictionnaires de resources : les ressources ne sont plus chargés entièrement avec le dictionnaire mais uniquement lorsqu’un composant y fait référence. Attention au “resources/templates” faisant référence à une autre resource qui ne serait pas existante, cela ne crashera plus au chargement du dictionnaire mais à la première utilisation de la resource en question.
- Header des ItemsPresenter : les propriétés Vertical/HorizontalAlignement sont désormais respectées
- Système d’événements touch/clavier/souris : l’événement ManipulationStarting est maintenant levé à chaque manipulation même deux à la suite. Les coordonnées des événements RightTapped sont maintenant toujours bonnes.
- GroupStyles : certaines propriétés(Panel,ContainerStyle, et ContainerStyleSelector) ne sont plus honorés du fait de fix mis en place pour améliorer les performances.
- événement ImageOpened : dorénavant en cas de changement de DPI, les image sont rechargées et cet événement est donc relancé: attention si vous basiez la logique d’un control dessus.
Et voici une petite section spéciale pour la WebView qui change beaucoup :
- Airspace : plus de problème de WebView passant au dessus de vos contrôles : youpi !!
- ScriptNotify, AllowedScriptNotifyUris, WebView.AnyScriptNotifyUri : Ces événements et propriétés disparaissent et il faut maintenant passer par la section “ApplicationContentUriRules” de votre manifest.
- AppData : il est maintenant possible de naviger vers des contenus locaux de votre app (ms-appdata:///) : super !
Je vous invite aussi à lire le post de Thomas sur ce control.
Microsoft a publié une liste complète en anglais des breaking changes lorsque vous migrez votre application vers le nouveau framework 8.1.
Commentaires