かずきのBlog@hatena

日本マイクロソフトに勤めています。XAML + C#の組み合わせをメインに、たまにASP.NETやJavaなどの.NET系以外のことも書いています。掲載内容は個人の見解であり、所属する企業を代表するものではありません。

Xamarin.Androidで、とりあえずアプリのデータが消えないようにする方法

最近はそうでもないのかもしれませんが、Androidに限らずモバイル向けアプリってメモリ節約のために裏側にまわるといつ落ちてもおかしくない状況になるものですよね。 そんな状態に対応する方法として、Androidは、ActivityのOnSaveInstanceStateメソッドを使うみたいです。

保存先は、BundleというクラスでPutというメソッドでデータを保存して、Getというメソッドでデータを取得できる。ということで、超簡単なコードはこんな感じになるっぽい。

using Android.App;
using Android.OS;
using Android.Widget;
using System;

namespace App10
{
    [Activity(Label = "App10", MainLauncher = true, Icon = "@drawable/icon")]
    public class MainActivity : Activity
    {
        private DateTime createdTime;

        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);
            if (bundle == null)
            {
                this.createdTime = DateTime.Now;
            }
            else
            {
                this.createdTime = DateTime.ParseExact(bundle.GetString("createdTime"), "yyyy/MM/dd HH:mm:ss", null);
            }

            SetContentView(Resource.Layout.Main);
            var label = this.FindViewById<TextView>(Resource.Id.Main_LabelTimeStamp);
            label.Text = this.createdTime.ToString("yyyy/MM/dd HH:mm:ss");
        }

        protected override void OnSaveInstanceState(Bundle outState)
        {
            outState.PutString("createdTime", this.createdTime.ToString("yyyy/MM/dd HH:mm:ss"));
            base.OnSaveInstanceState(outState);
        }
    }
}

これで、Activityがメモリ不足とかで消えても、復帰時にちゃんと値が復活するという寸法。