差分
Androidのアクティビティ間で[[ビットマップ]]などの巨大な[[データ]]を引き回したい時にインテントではサイズ制限で落ちる機種が存在する。
インテントの上限値は機種ごとに異なるようで同じデータでも落ちる機種と落ちない機種があるようだ。
そういうときはApplicationクラスを拡張してデータ共有用のプロパティを用意すればいいらしい。
Applicationクラスを拡張する基本はこの説明がわかりやすい。
Xamarin.Android でオレオレ Application クラスを使う
http://qiita.com/amay077/items/0aa8cbfe2eddda399378
Applicationクラスを拡張したクラスを作った後は普通にパブリックなプロパティを追加すればよい。
なお、Androidの流儀ではOnTerminate呼び出し時に明示的にメモリ解放すべきらしい。
<source lang="csharp">
[Application]
public class MyApplication : Application
{
public byte[] RawData { get; set; }
public MyApplication(IntPtr javaReference, JniHandleOwnership transfer)
: base(javaReference, transfer)
{
}
public override void OnTerminate()
{
RawData = null;
base.OnTerminate();
}
}
</source>
呼び出し側
<source lang="csharp">
var app = (MyApplication)this.Application;
app.RawData = rawData;
var intent = new Intent(this, typeof(Activity2));
//intent.PutExtra("RawData",rawData);
StartActivity(intent);
</source>
受け取り側
<source lang="csharp">
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
var app = (MyApplication)this.Application;
var rawData = app.RawData;
//var intent = this.Intent;
//var rawData = intent.GetIntExtra("RawData", null);
}
</source>
== 関連項目 ==
* [[Xamarin.Android/ディスプレイをスリープさせない]]
== 参考文献 ==
{{reflist}}
[[category: Xamarin.Android]]
インテントの上限値は機種ごとに異なるようで同じデータでも落ちる機種と落ちない機種があるようだ。
そういうときはApplicationクラスを拡張してデータ共有用のプロパティを用意すればいいらしい。
Applicationクラスを拡張する基本はこの説明がわかりやすい。
Xamarin.Android でオレオレ Application クラスを使う
http://qiita.com/amay077/items/0aa8cbfe2eddda399378
Applicationクラスを拡張したクラスを作った後は普通にパブリックなプロパティを追加すればよい。
なお、Androidの流儀ではOnTerminate呼び出し時に明示的にメモリ解放すべきらしい。
<source lang="csharp">
[Application]
public class MyApplication : Application
{
public byte[] RawData { get; set; }
public MyApplication(IntPtr javaReference, JniHandleOwnership transfer)
: base(javaReference, transfer)
{
}
public override void OnTerminate()
{
RawData = null;
base.OnTerminate();
}
}
</source>
呼び出し側
<source lang="csharp">
var app = (MyApplication)this.Application;
app.RawData = rawData;
var intent = new Intent(this, typeof(Activity2));
//intent.PutExtra("RawData",rawData);
StartActivity(intent);
</source>
受け取り側
<source lang="csharp">
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
var app = (MyApplication)this.Application;
var rawData = app.RawData;
//var intent = this.Intent;
//var rawData = intent.GetIntExtra("RawData", null);
}
</source>
== 関連項目 ==
* [[Xamarin.Android/ディスプレイをスリープさせない]]
== 参考文献 ==
{{reflist}}
[[category: Xamarin.Android]]