17 Sep

Menggunakan TombStone di Windows Phone

ketika status aplikasi kita sedang dalam status TombStone, maka kita dapat melakukan penyimpanan Application dan Page State. Fungsinya ketika halaman dilakukan reload maka kita dapat melakukan reload data (state) sebelumnya.

Untuk mempermudah proses management TombStone State maka kita dapat membuat class baru dengan nama StateManager. Kelas tersebut dapat membantu kita untuk melakukan serialisasi data, kemudian masuk ke TombStone State, dan melakukan deserialisasi data ketika sudah kembali seperti semua.

Sebagai contoh kita ingin menyimpan data-data berikut:
1. PostingTerbaru
2. Komentar
3. Galeri
4. Berita

maka kita akan dapat menyimpan data-data tersebut dalam TombStone state dan mereload kembali ketika dibutuhkan.

Cara menyimpan data, kita dapat melakukan pemanggilan perintah tersebut pada event: OnNavigatedFrom():

protected override void OnNavigatedFrom(NavigationEventArgs e)
{
    this.SaveState("PostingTerbaru", PostingTerbaru);
    this.SaveState("Komentar", Komentar);
    this.SaveState("Galeri", Galeri);
    this.SaveState("Berita", Berita);
}

Berikutnya jika kita akan memanggil kembali kita dapat menaruh kode berikut pada OnNavigatedTo():

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    PostingTerbaru = this.LoadState<ObservableCollection<RssItem>>("PostingTerbaru");
    Komentar = this.LoadState<ObservableCollection<RssItem>>("Komentar");
    Galeri = this.LoadState<ObservableCollection<RssItem>>("Galeri");
    Berita = this.LoadState<ObservableCollection<ImageItem>>("Berita");
}

Berikutnya adalah isi dari Class StateManager:

public static class StateManager
{
    public static void SaveState(this PhoneApplicationPage phoneApplicationPage, string key, object value)
    {
        if (phoneApplicationPage.State.ContainsKey(key))
        {
            phoneApplicationPage.State.Remove(key);
        }

        phoneApplicationPage.State.Add(key, value);
    }

    public static T LoadState<T>(this PhoneApplicationPage phoneApplicationPage, string key)
        where T : class
    {
        if (phoneApplicationPage.State.ContainsKey(key))
        {
            return (T)phoneApplicationPage.State[key];
        }

        return default(T);
    }
}

Leave a Reply

Your email address will not be published. Required fields are marked *