Android アプリ制作開発をしよう。
リソース変更に伴いアクティビティを破棄して最初から作り直す。これは onCreate() が再び呼び出されてしまうから。画面を縦から横にするとビデオが最初から再生されるのもこのため。
データを保持するためにはどうするのか?
Activity で onRetainNonConfigurationInstance() を実装する。
@Override public Object onRetainNonConfigurationInstance() { final KeepInfo data = new KeepInfo(hoge, fuga); return data; }
package ms.creator.android.hoge; public class KeepInfo { public String hoge; public int fuga; public KeepInfo(String hoge, int fuga){ this.hoge = hoge; this.fuga = fuga; } }
その情報を復元するには、getLastNonConfigurationInstance() を使用する。
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); final KeepInfo data = (KeepInfo) getLastNonConfigurationInstance(); if (data == null) { } else { Log.v("hoge", String.valueOf(data.hoge)); Log.v("fuga", String.valueOf(data.fuga)); } }
現在のインテントや実行中のスレッドの参照なども含め、何でも維持することができる。
注意なのは、Drawable、Adapter、View、Context に関連付いている Activity に関係のあるオブジェクトは渡してはいけないこと。
これをしてしまうとリソースがメモリリークしてしまうみたい。