かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

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がメモリ不足とかで消えても、復帰時にちゃんと値が復活するという寸法。