[Windows Phone 7] Toutes les nouveautés du SDK de Mango expliquées!

La future mise à jour de Windows Phone 7, nom de code « Mango », va apporter son lot de nouveautés en termes de fonctionnalités, et pour supporter ça, le SDK s’enrichit considérablement  : au programme, plus de 1500 nouvelles APIs, et pour commencer, le support de Silverlight 4 !! On va pouvoir profiter du multitasking, une base de données locale, des sockets, des nouvelles API pour les capteurs, plus de souplesse sur la gestion des tuiles et des notifications en push, l’intégration de Silverlight et XNA, de la réalité augmentée, l’accès aux contacts et au calendrier… et j’en passe.

Le multitasking

Le multitasking était interdit pour les applications tierces dans la première version du SDK, mais avec Mango il y a maintenant des scénarios spécifiques dans lesquels il sera possible de faire tourner du code en background.

Un autre avantage avec le multitasking est la possibilité de revenir à une application sans temps de chargement. En fait par défaut avec Mango, l’application sera désactivée mais sa mémoire ne sera pas libérée : on dira que l’application sera « dormante ». La mémoire ne seralibérée que si c’est nécessaire, sachant qu’on peut avoir jusqu’à 5 applications dormantes en même temps. En revanche, il est possible qu’à un certain point, l’application soit tombstonée, c’est pouquoi quoi qu’il arrive il faudra faire de la sauvegarde de contexte. En revanche, au chargement, on pourra tester avec une simple API à tester si l’application est dormante ou tombstonée.

En plus de « fast app switching », les API de multitasking introduisent 3 concepts :

  • Les services
  • Les agents
  • Le background processing « générique »

Nous allons détailler ces 3 cas de multitasking dans les sous-parties suivantes.

Les services

Il devient avec Mango possible de piloter des services du système avec des API : par exemple, des alarmes (comme le réveil), et des reminders (comme ceux du calendrier). Un autre service accessible est la lecture audio en background (par exemple pour les applications radios) qui permettra d’utiliser l’API MediaStreamSource qui permet de customiser le pipeline audio (ce qui inclut la potentielle gestion des DRM ou des protocoles spéciaux). Le dernier service est le transfert de données en background qui permettra de télécharger des données même quand l’application sera dormante ou tombstonée. L’avantage de ce service est qu’il persiste même malgré un redémarrage du téléphone!

Les agents

Les agents permettent de faire tourner du code en background, dans un processus différent de l’application.

On peut faire à peu près tout dans les agents : accéder au réseau, au GPS, mettre à jour les tuiles dynamiques, etc. En revanche évidemment on ne peut pas manipuler d’interfaces graphiques, ni le micro ou la camera.

Les agents permettent d’ouvrir un certain nombre de scénarios comme la synchro de donnée, le tracking, la localisation sociale, etc.

Le background processing générique

Quand l’application ne tourne pas au premier plan (foreground) l’agent devra adopter l’un des deux types suivants :

- Périodique : Exécute du code pendant 15 secondes toutes les 30 minutes

- En mode inactif : quand le téléphone est branché sur le secteur, et sur une connexion qui n’est pas cellulaire.

Les sockets

Dans la première version du SDK le développeur ne disposait que des canaux http et https pour communiquer entre le téléphone et le cloud. Il sera maintenant possible d’utiliser des sockets, en TCP et en UDP, en Unicast et en multicast. Cette implémentation des sockets est donc elle-même plus riche que celle de Silverlight 4 !! Sur scène Jaime Rodriguez et Scott Guthrie ont démontré un client IRC qui, grâce à une librairie opensource déjà existante, aurait été codée (en tous cas c’est ce que veux la légende) en moins d’une heure ! Mais ce n’est pas la seule chose qu’on aura vu… car Joe Belfiore aura également annoncé Skype…

Les tuiles et les notifications en push

Avec la première version du SDK il y avait 2 moyens de manipuler les tuiles : avec des notifications en push, ou à intervalles réguliers avec l’API ShellTileScheduler. Et on avait 3 différents « champs » : le texte, un compteur, et l’image.
Le SDK Mango introduit un nouveau modèle de programmation des tuiles, le modèle « local » qui permet d’éditer une tuile depuis l’application si elle est en foreground, ou depuis un background agent.

Une autre nouveauté est de pouvoir avoir plusieurs tuiles par application : depuis l’application on pourra choisir d’afficher différentes tuiles, manipulables individuellement, et qui pourraient mener vers différentes parties de l’application.

Dernière chose, il sera maintenant possible d’accéder aux deux faces de la tuile pour l’animer sur l’écran d’accueil et fournir plus d’infos aux utilisateurs !

Les performances ont été grandement améliorées, à la fois entre le serveur et le téléphone, et à l’intérieur du téléphone. Et pour ceux qui se posent la question : non ce n’est pas du polling, oui c’est bien du Push.

Enfin, la charge « embarquable » dans une notification passe de 1Ko à 4Ko, et le nombre maximal d’applications pouvant utiliser les notifications en push sur un terminal passe de 15 à 50.

En ce qui concerne les toasts, il va maintenant être possible de « paramétrer » la notification afin de naviguer directement vers un endroit spécifique de l’application si on clique sur le toast.

Des API d’accès à plus de ressources du téléphone : capteurs, contacts, calendrier…

En premier lieu, de nouveaux launchers et choosers permettront d’accéder aux contacts, au calendrier, aux adresses des utilisateurs et de lancer l’application Bing Maps y compris pour des itinéraires. Il sera possible de manipuler des « alarmes » et des « reminders » pour enrichir l’expérience de votre application quand elle n’est pas lancée, et s’intégrer encore mieux dans le système. Mais ce n’est pas tout : il y aura également accès à plus de capteurs : la boussole, et même un gyroscope optionnel ! Non seulement aura-t-on accès à ces capteurs, mais aussi à un framework qui permettra de les manipuler et d’en intégrer facilement les données dans l’application. Enfin et ce n’est pas la moindre des nouveautés, les développeurs auront un accès direct à la caméra ! Les exemples de la keynote du MIX tournaient autour du scan de code-barres, mais aussi de la réalité augmentée! Dernier détail… il sera aussi possible de manipuler… les sonneries !

L’intégration de Silverlight et XNA

Dans la première version du SDK il fallait choisir entre une application XNA et une application Silverlight, avec Mango, on peut utiliser les deux dans la même application ! Non seulement il sera possible d’ouvrir, depuis une application Silverlight, une « page » qui utilise la game loop et le rendering XNA, mais il sera également possible de superposer des contrôles Silverlight au-dessus d’une scène XNA, et bien entendu, d’avoir des interactions entre les deux ! Je ne sais pas pour vous, mais moi quand je pense à ça et en même temps l’accès direct à la caméra, j’ai une grosse envie de réalité augmentée !

Pour le fun, ce qui n’ont pas vu la keynote de MIX, vous pourrez la retrouver après l’évènement, vous devriez sauter directement vers 1h25 pour voir la démo énorme de Scott Guthrie à propos du sujet.. une bonne barre de rire en perspective !

L’amélioration des outils de développement

Les outils étaient déjà particulièrement sympas avec la v1 du SDK, mais nous avons reçu quelques feedbacks à propos de la simulation de l’accéléromètre et du GPS : avec Mango, ça sera possible !! La nouvelle version des outils incluera des outils pour simuler l’accéléromètre et le GPS dans l’émulateur. Les développeurs auront donc accès à une fenêtre en plus dans l’émulateur qui représentera le terminal en 3D et permettra de le manipuler dans l’espace, et pour le GPS, à une carte qui permettra de simuler des évènements GPS (nouvelle localisation, mais également, un trajet !).

Une autre grosse demande que nous avons pris en compte est la possibilité d’instrumenter son code pour faire de l’analyse de performances, et directement dans Visual Studio, on pourra lancer une analyse de performance sur les temps d’exécution et les allocations mémoire, lorsque l’application tourne.

La base de données locale

Il est des applications qui ont besoin de manipuler de grandes quantités de données : que ce soit des applications avec des structures de données complexes (ce qui est le cas de beaucoup d’applications métiers), ou bien tout simplement avec de grandes quantités de données comme par exemple, une application dictionnaire. Dans ces cas, l’isolated storage, et le stockage de fichiers « à plat » n’est pas une option idéale. C’est pourquoi avec Mango nous rajoutons une base de données locale, et la possibilité d’interagir avec cette base de données avec des requêtes LINQ ! Les scénarios de requêtages vont bien sur être beaucoup plus performant et comme le démontrait Jaime Rodriguez sur scène à la keynote, l’implémentation par exemple de fonctions de recherches sera beaucoup plus simple !! Les fondations de cette base de données et de ce système de requêtage sont bien entendu SQL CE et ADO.NET.

Il sera possible d’adopter une approche « code first » dans laquelle on créera les objets en code, qu’on « décorera » avec des attributs particuliers qui transformeront le modèle objet en une base de données, avec quelques API simples pour manipuler cette base à la main si besoin.

Internet Explorer 9

Le nouveau navigateur du téléphone intègre le support de HTML5, et même l’accélération hardware. Bonne nouvelle le contrôle WebBrowser d’une application Windows Phone se comportera de la même manière. Nous allons pousser les gens a utiliser les spécifications stables d’HTML5, et le navigateur intégrera le support de la geolocalisation par exemple. Comme avec Internet Explorer sur le PC la démarche de Microsoft est de supporter les standards stables qui garantissent l’expérience « same markup » pour tous les terminaux possibles et imaginables.