从墓碑中返回时的应用认证要求

时间:2013-02-25 14:22:49

标签: windows-phone-8 windows-phone tombstoning

我有一个页面,用户可以输入他的名字并附上图片。

从逻辑删除状态返回时,我的应用程序是否也必须恢复图像?

  1. 它是应用程序认证要求,没有它我的应用程序将无法通过认证吗?或者它是推荐的模式?

  2. 例如,当我有一个支点时,是否必须保存所选枢轴项的索引,并在从逻辑删除中激活时恢复选择?

  3. 没必要: 是否有一个流行的库\框架来帮助我进行墓碑和序列化对象,图像等?

1 个答案:

答案 0 :(得分:0)

根据Technical certification requirements for Windows Phone,唯一的要求是:

  

当用户按下“开始”按钮或设备超时导致锁定屏幕进入时,Windows Phone应用程序将被停用。 Windows Phone应用程序也会停用,因为它会调用Launcher或Chooser API。

     

Windows Phone OS 7.0应用程序在停用时会被逻辑删除(终止)。 Windows Phone OS 7.1或更高版本的应用程序在停用时会变为休眠状态,但在资源使用策略使其成为逻辑删除时可由系统终止。

     

终止后激活时,应用程序必须符合第5.2.1节 - 启动时间的要求。

如第5.2.1节 - "发布时间"只关注启动性能和响应能力,您对问题没有认证要求。

然而,如果用户输入数据(附上图像等)并且让它说它接听电话,那么做一些其他的东西然后回到应用程序然后他输入的数据是失去了...它肯定不会欣赏它。这看起来更像是一个缺陷/错误。

关于你的州的序列化,我建议你使用二进制序列化,因为性能比使用Json,Xml或任何其他格式至少好10倍。

就个人而言,我实现了一个自定义界面,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);
        }
    }
}