1

1 つのイメージボードに対して単純なイメージビューアーを作成しています。アプリでナビゲーション(メソッドのナビゲーションパラメーターFrame.Navigate())にこれらの2つのクラスを使用しています:

public class KonaParameter
{
    public int page { get; set; }
    public string tags { get; set; }

    public KonaParameter()
    {
        page = 1;
    }
}

public class Post
{
    public int id { get; set; }
    public string tags { get; set; }
    public int created_at { get; set; }
    public int creator_id { get; set; }
    public string author { get; set; }
    public int change { get; set; }
    public string source { get; set; }
    public int score { get; set; }
    public string md5 { get; set; }
    public int file_size { get; set; }
    public string file_url { get; set; }
    public bool is_shown_in_index { get; set; }
    public string preview_url { get; set; }
    public int preview_width { get; set; }
    public int preview_height { get; set; }
    public int actual_preview_width { get; set; }
    public int actual_preview_height { get; set; }
    public string sample_url { get; set; }
    public int sample_width { get; set; }
    public int sample_height { get; set; }
    public int sample_file_size { get; set; }
    public string jpeg_url { get; set; }
    public int jpeg_width { get; set; }
    public int jpeg_height { get; set; }
    public int jpeg_file_size { get; set; }
    public string rating { get; set; }
    public bool has_children { get; set; }
    public object parent_id { get; set; }
    public string status { get; set; }
    public int width { get; set; }
    public int height { get; set; }
    public bool is_held { get; set; }
    public string frames_pending_string { get; set; }
    public List<object> frames_pending { get; set; }
    public string frames_string { get; set; }
    public List<object> frames { get; set; }
    public object flag_detail { get; set; }
}

私が直面した問題は、中断が機能しないことです。SuspensionManager は、呼び出し後に「SuspensionManager failed」例外をスローしawait SuspensionManager.SaveAsync();ます (複雑な型を使用しているためだとグーグルで調べました)。

文字列をナビゲーション パラメータとして使用しようとしました。動作しますが、パラメーターに複数の文字列が必要です (List<string>動作しません、使用しようとしました)。

アプリを正しく一時停止する方法は?

4

2 に答える 2

4

問題は、SuspensionManager が Frame.GetNavigationState() を使用してフレームの履歴を取得することです。次に、ナビゲーション履歴を文字列にシリアル化しようとしますが、残念ながら、Post や KonaParameter などのパラメーターとしてカスタム複合型をシリアル化する方法を知る方法がなく、例外で失敗します。

SuspensionManager を使用する場合は、パラメーターとして int や string などの単純な型に制限する必要があります。

複雑な型が必要な場合は、バックグラウンド サービス/リポジトリに識別子を付けて格納することをお勧めします。その後、識別子をパラメーターとして渡すことができます。

于 2013-09-22T07:21:36.290 に答える
3

推奨されるアプローチは、「状態」オブジェクトをシリアル化して、文字列として保存/復元できるようにすることです。Json.NETを使用してこれを行うことができます。

//save state
Post post = //...;
string state = JsonConvert.Serialize(post)

//restore state
Post post = JsonConvert.Deserialize<Post>(state);

2 つのオブジェクト (Post と KonaParameter) を使用する場合は、両方をカプセル化する「集約」クラスを作成し、代わりにそれをシリアライズ/デシリアライズすることを検討します。

public class State
{
    public Post post {get; set;}
    public KonaParameter param {get; set;}
}
于 2013-09-18T07:53:34.467 に答える