Требования к сертификации приложений при возвращении из захоронения

У меня есть страница, на которой пользователь может ввести свое имя и прикрепить изображение.

При возврате из состояния захоронения обязательно ли моему приложению также восстанавливать изображение?

  1. Является ли это требованием сертификации приложения, без чего мое приложение не пройдет сертификацию? Или это рекомендуемая схема?

  2. тот же вопрос, например, в случае, когда у меня есть сводка, обязательно ли сохранять индекс выбранного элемента сводки и восстанавливать выбор при активации из надгробия?

Не обязательно: есть ли популярная библиотека\фреймворк, которая поможет мне с захоронением и сериализацией объектов, изображений и т. д.?


person Andrei N.    schedule 25.02.2013    source источник


Ответы (1)


В соответствии с требованиями к технической сертификации. для Windows Phone единственными требованиями являются:

Приложение Windows Phone деактивируется, когда пользователь нажимает кнопку «Пуск» или если время ожидания устройства приводит к включению экрана блокировки. Приложение Windows Phone также деактивируется, поскольку оно вызывает API-интерфейс Launcher или Chooser.

Приложение Windows Phone OS 7.0 удаляется (прекращено), когда оно деактивировано. Приложение Windows Phone OS 7.1 или более поздней версии становится бездействующим, когда оно деактивировано, но может быть остановлено системой, когда политика использования ресурсов приводит к его захоронению.

При активации после закрытия приложение должно соответствовать требованиям Раздела 5.2.1 — Время запуска.

Поскольку раздел 5.2.1 — Время запуска касается только производительности запуска и времени отклика, у вас нет требований к сертификации для вашей проблемы.

Однако, если пользователь вводит данные (прикрепляет изображения и т. д.) и, скажем, отвечает на звонок, выполняет какие-то другие действия и возвращается в приложение, а затем введенные им данные теряются... он, конечно, не оценит это. . Это будет больше похоже на дефект/ошибку.

Что касается сериализации вашего состояния, я рекомендую вам использовать двоичную сериализацию, так как производительность как минимум в 10 раз выше, чем при использовании Json, Xml или любого другого формата.

Лично я реализую собственный интерфейс IBinarySerializable для своих классов, связанных с состоянием, и использую этот класс расширений BinaryWriter, чтобы помочь написать код сериализации:


using System.IO;

namespace MyCompany.Utilities
{
    public interface IBinarySerializable
    {
        void Write(BinaryWriter writer);
        void Read(BinaryReader reader);
    }
}

using System;
using System.Collections.Generic;
using System.IO;

namespace MyCompany.Utilities
{
    public static class BinaryWriterExtensions
    {
        public static void Write<T>(this BinaryWriter writer, T value) where T : IBinarySerializable
        {
            if (value == null)
            {
                writer.Write(false);
                return;
            }

            writer.Write(true);
            value.Write(writer);
        }
    
        public static T Read<T>(this BinaryReader reader) where T : IBinarySerializable, new()
        {
            if (reader.ReadBoolean())
            {
                T result = new T();
                result.Read(reader);
                return result;
            }

            return default(T);
        }

        public static void WriteList<T>(this BinaryWriter writer, IList<T> list) where T : IBinarySerializable
        {
            if (list == null)
            {
                writer.Write(false);
                return;
            }

            writer.Write(true);
            writer.Write(list.Count);
            foreach (T item in list)
            {
                item.Write(writer);
            }
        }

        public static List<T> ReadList<T>(this BinaryReader reader) where T : IBinarySerializable, new()
        {
            bool hasValue = reader.ReadBoolean();
            if (hasValue)
            {
                int count = reader.ReadInt32();
                List<T> list = new List<T>(count);
                if (count > 0)
                {
                    for (int i = 0; i < count; i++)
                    {
                        T item = new T();
                        item.Read(reader);
                        list.Add(item);
                    }
                    return list;
                }
            }

            return null;
        }

        public static void WriteListOfString(this BinaryWriter writer, IList<string> list)
        {
            if (list == null)
            {
                writer.Write(false);
                return;
            }

            writer.Write(true);
            writer.Write(list.Count);
            foreach (string item in list)
            {
                writer.WriteSafeString(item);
            }
        }

        public static List<string> ReadListOfString(this BinaryReader reader)
        {
            bool hasValue = reader.ReadBoolean();
            if (hasValue)
            {
                int count = reader.ReadInt32();
                List<string> list = new List<string>(count);

                if (count > 0)
                {
                    for (int i = 0; i < count; i++)
                    {
                        list.Add(reader.ReadSafeString());
                    }
                    return list;
                }
            }

            return null;
        }

        public static void WriteSafeString(this BinaryWriter writer, string value)
        {
            if (value == null)
            {
                writer.Write(false);
                return;
            }
        
            writer.Write(true);
            writer.Write(value);
        }

        public static string ReadSafeString(this BinaryReader reader)
        {
            bool hasValue = reader.ReadBoolean();
            if (hasValue)
                return reader.ReadString();

            return null;
        }

        public static void WriteDateTime(this BinaryWriter writer, DateTime value)
        {
            writer.Write(value.Ticks);
        }

        public static DateTime ReadDateTime(this BinaryReader reader)
        {
            var int64 = reader.ReadInt64();
            return new DateTime(int64);
        }
    }
}
person Catalin M.    schedule 25.02.2013
comment
Итак, сертификацию проходить не обязательно. Я очень спешу с публикацией приложения, я исправлю проблему в обновлении. - person Andrei N.; 25.02.2013