画面回転によるActivityの再起動に対応する
※この記事はあまりよく理解していない人が書いているので、あまり参考にしないでください。
さて前置きしたところで、
今までActivityの再起動、再作成が面倒だったので、画面を回転できないように固定するという解決策を取っていたが、そうは言ってられなくなったので対応したのでメモ。
Activityが再作成されて何が問題かというと、自分が分かる範囲では、
1.インスタンス変数などが初期化される。
2.onCreateが再び呼ばれる。
ということです。つまり、もう一度最初から処理が走ってしまうし、その時の変数は完全に失われているということ。
これに対応するために、onSaveInstanceStateとかonRestoreInstanceStateなどを使うらしい。
(ところでonCreate時に渡される引数、savedInstanceStateとはいつ使うのだろうか?)
簡単に例を挙げると、こんな感じ。
@Override
public void onSaveInstanceState(Bundle state){
super.onSaveInstanceState(state);
state.putString("FILE_PATH", mSavedImageFilePath);
}
@Override
public void onRestoreInstanceState(Bundle state){
super.onRestoreInstanceState(state);
mSavedImageFilePath = state.getString("FILE_PATH");
}
こうやってインスタンス変数をBundleにputして、そしてリストアされるときにインスタンス変数にBundleからgetしたものを代入する。
そうすることで画面回転前と後でインスタンス変数が共有される。
あと、onCreateにもう一度走ってしまうと不都合があるコードが含まれているのなら、
if( savedInstanceState == null){
// ここに再作成時には実行したくない処理
}
という風にしておくと2回目以降の再作成では実行されない。