Windows Phone

20 articles

Image depuis HTTP avec C# XAML – Comparatifs et Performances – Partie 2

Introduction

 wp_ss_20141223_0001

Cet article traite des résultats des différentes méthodes pour lire une image provenant d’un site Http.

Les différentes implémentations ont été décrites dans l’article

Image depuis http avec C# Xaml – comparatifs et performances.

Mesures

L’image étalon fait 19ko et mesure 400×240 pixels. Elle est présente notamment sur les serveurs de Bing à l’adresse suivante :

http://www.bing.com/az/hprichbg/rb/ChristmasMarketNurnberg_FR-FR11351563819_1280x768.JPG

Le premier test va charger 10 fois la même image suivante :

Poursuivre la lecture

Image depuis HTTP avec C# XAML – Comparatifs et Performances – Partie 1

Introduction

Chargement Bitmap Image en Http

Voici un article en 2 parties pour décrire les différentes implémentations possibles de la lecture d’images provenant d’un serveur en Http.
En terme de performances, il existe des différences assez conséquentes suivant les implémentations choisies.

Nous allons voir que parfois les résultats sont assez surprenants.

Charger une image depuis XAML

Le moyen le plus simple pour charger une image reste l’implémentation XAML.

<Image Source="{Binding ImageUrl}" Width="400" Height="240"/>

ImageUrl est de type Url et peut être déclarée de cette façon dans le viewModel associé à la Page.

public  Uri ImageUrl
{
    get
    {
        return new Uri(@"http://www.bing.com/az/hprichbg/rb/SnowyCP_FR-FR11972876588_400x240.jpg");
    }
}

Cette implémentation est très efficace, le contrôle XAML gère quasiment tout pour vous :

  • le chargement en asynchrone : Ne fige pas l’affichage de l’interface lors du chargement
  • la mise en cache mémoire (un seul chargement)
  • L’optimisation http (évite un échange serveur si l’image est déjà chargée)

Cependant l’image chargée en XAML sera de nouveau rechargée à chaque lancement de l’application.
Afin de mettre en place un système de cache persisté, il est nécessaire de charger le contenu de l’image et de la sauvegarder sur le téléphone dans l’Isolated Storage.

Quelles sont les méthodes possibles pour charger et afficher une image en asynchrone ?

Voici 9 façons de faire en Universal Apps (Windows Phone XAML ou Windows 8.1). Leurs temps de réponse seront mesurés sur Windows Phone 8.1 et exposés dans la 2ème partie de cet article.

Implémentations

 

1 – DataWriter

La première implémentation, la plus classique, est d’utiliser un httpClient pour récupérer le flux sous forme de Stream puis de le transférer dans le BitmapImage en passant par un DataWritter.

Windows 8 et les Universal Apps nous obligent à passer par un nouveau type de Stream le InMemoryRandomAccessStream pour l’afficher comme source dans le BitmapImage. Poursuivre la lecture

Mise en cache d’image dans l’isolated storage avec Windows XAML et SemaphoreSlim

 

Ecriture dans l’isolated Storage d’un fichier image

Ecriture Multiple dans l'Isolated Storage

Il est parfois fort utile de sauvegarder les images provenant d’un serveur HTTP dans un cache afin d’éviter de les charger à chaque fois.

En implémentant ce système de cache en asynchrone, je me suis rendu compte de plusieurs problèmes causant systématiquement un UnauthorizedAccessException: Access is denied (0x80070005).

Poursuivre la lecture

MvvmLight 5.0 et la navigation

Nouveautés

Une grande nouveauté de MVVMLight5 est l’apparition du INavigationService.

Le INavigationService est un Pattern permettant la navigation dans l’application sans utiliser la couche visuelle. Il est alors possible de migrer le même code sous différentes plateformes sans les particularités de la navigation.

Il sera également possible de tester les actions de navigation grâce aux tests unitaires automatisés.

Poursuivre la lecture

Migration du RoundButton en Universal App

Introduction

AppBarButtonsScreenshot

En Windows Phone, les Round Button (Bouton antouré d’un cercle) étaient utilisés à travers un Framework additionnel le Coding4Fun Toolkit.

Exemple d’utilisation en Windows Phone Silverlight :

Ajout de l’espace de nommage dans la page

xmlns:c4f="clr-namespace:Coding4Fun.Phone.Controls;assembly=Coding4Fun.Phone.Controls"

Utilisation dans la page Xaml

<c4f:RoundButtonImageSource="Images/EditImage.png"
    Content="Edition"
    Command="{Binding EditCommand}" />

Avec les Universal Apps, ce Framework se fait malheureusement encore un peu attendre et de nombreux composants standards peuvent remplacer en natif ce fameux Round Button.

AppBarButtoon

Le AppbarButton est un bouton rond qui s’affiche normalement dans la barre de tâche en bas de l’écran.Mais il est également possible de l’utiliser n’importe où dans la page comme l’ancien RoundButton. Poursuivre la lecture

Les liens pour bien démarrer avec Unity3D (Universal Apps)

unity3d

Cet article recense les différents liens qui m’ont été très utiles pour la création d’un jeu 2D avec Unity3D.

Le jeu en question s’appelle 4×3 disponible en Universal Apps sur Windows 8.1 et Windows Phone 8.1.

Unity3D

Unity et Windows 8.1, Windows Phone 8.1 et les universal Apps

Il est essentiel d’installer la version au moins égale à la 4.5.3. Seule cette version supporte les Universal Apps (apps pour Windows Phone et Windows 8.1).

Allez donc directement sur le site. Si vous avez déjà une version installée, ne vous fiez pas trop à la vérification automatique des mises à jour qui ne vérifient que les versions mineures (pour ma part).

Le lien pour télécharger la version est ici (> 1Go !) :

http://unity3d.com/unity/download

Unity et Visual Studio

Pour utiliser visual Studio à la place de MonoDevelop (livré en standard dans le package Unity), il existe un plugin (ex: SyntaxTree) racheté très récemment et offert gracieusement par Microsoft.

http://blogs.msdn.com/b/visualstudio/archive/2014/07/29/visual-studio-tools-for-unity-1-9.aspx

Le plugin existe sur les 3 dernières versions de Visual Studio 2010, 2012 et 2013. Il vous permet de manipuler le c#, débugger votre projet depuis Visual Studio. De quoi être très productif.

Poursuivre la lecture

Migration du LongListSelector en Universal Apps – 2ème Partie

Nous poursuivons l’article sur la migration du LongListSelector (WP8 et WP8.Silverlight) vers les Universal Apps (WP8 et W8.x)

Nous avons vu dans le précédent article la migration des listes simples et des listes regroupées.

Dans cet article nous allons voir maintenant la migration du « JumpList ».

Le JumpList permet d’offrir des raccourcis de navigation lors du clic (ou tap) sur un regroupement.

Migrer le Jumplist en Universal Apps - Liste regtroupée wp_ss_20140925_0004

Avant avec le LongListSelector

En WP8.0 Silverlight, la gestion du JumpList passe obligatoirement par la définition du style associé à la propriété JumpListStyle. Sans cette association, la Jumplist ne fonctionnait pas.

Poursuivre la lecture

Optimiser la synchro HTTP de vos apps avec le champ Header « If-Modified-Since »

Le saviez vous ? Ajouter le champ Request-Header « If-Modified-Since » peut faire gagner à votre application de la rapidité et éviter de drainer l’énergie de la batterie du smartphone de l’utilisateur.

Protocole d’utilisation « HTTP/1.1 GET method »

Tout d’abord, à quoi sert ce champ d’entête ? Il permet d’ajouter une condition à la requête à envoyer en fonction d’une date : les données sont transférées dans leur totalité si elles ont été modifiées depuis la date donnée par le header « If-Modified-Since ».

Voici sommairement son fonctionnement :

Poursuivre la lecture

Migration du LongListSelector en Universal Apps

Après les ressources destinées aux traductions, nous continuons le tour d’horizon des éléments nécessaires pour migrer d’un projet Windows Phone 8.0 en Universal apps.

LongListSelector WP81

Le LongListSelector est un élément de liste très souvent utilisé : Il est apparu en 8.0 mais existait déjà dans la version 7.0 sous forme d’un composant tiers du Windows Phone Toolkit.

Avec les Universal Apps, ce composant disparaît au profit d’autres composants déjà présents dans Windows 8.0 : Listbox, ListView, GridView.

Liste Simple

Le cas le plus simple est lorsque LongListSelector est utilisé en mode simple Liste (sans regroupement).

Exemple de code :

<phone:LongListSelector
   ItemsSource="{Binding AllItemsViewModel}"    
   IsGroupingEnabled="False"
   ItemTemplate="{StaticResource ItemTemplate}" />

Poursuivre la lecture

Migration vers XAML 8.1 – les resw (migration rapide)

 

Cet article fait suite au précédent article concernant la migration de la partie « traduction » d’une application Windows Phone (7, 8 et Silverlight 8.1) en 8.1 XAML (Universal Apps)

Universal apps et traduction

Universal Apps

Nous avons pu voir précédemment que le portage pouvait être parfois un peu lourd.
Dans le cas où vous avez déjà de nombreuses ressources traduites dans les fichiers resx volumineux (et dans plusieurs langues), la suite peut vous intéresser.

Les identifiants de ressources

Nous avons vu dans le précédent article qu’il suffisait de

  1. renommer les fichiers .resx en .resw
  2. les mettre dans des répertoires normés avec un identifiant les ressources (ex : en-US, fr-FR,..)
  3. modifier le XAML pour remplacer le « {Binding… » par un x:Uid
  4. modifier tous les identifiants de ressources pour ajouter la propriété du contrôle qui sera traduite.

Pour éviter ce dernier cas parfois très lourd, il existe un solution qui peux vous faire gagner un peu de temps.

Poursuivre la lecture