結論:私がやった限りでは、できなさそうである。
configuration changeが発生すると、Activityが再起動される途中で、onSaveInstanceStateメソッドが呼ばれる。
しかしながら、このメソッドはOSが呼び出すのであって、プログラマがコードで呼び出すことはできない。
onConfigurationChangedメソッド内で、Intentに与えるフラグを操作して、新たにActivityを起動してやれば、onSaveInstanceStateメソッドが呼ばれる。
しかし、この場合、旧Activityのdestroyが、新ActivityのonCreateの後に発生する。この挙動は、私の希望ではない。
finishメソッドを使うと、onSaveInstanceStateメソッドは呼ばれない。
onSaveInstanceStateメソッドは、次のとおり書かれてある。
This method is called before an activity may be killed so that when it comes back some time in the future it can restore its state.しかしながら、実際には、killされない時にも呼ばれる場合がある。
onSaveInstanceStateメソッド内では、killされることを前提にコードを書いてはいけない。データを保存することに徹した方が良い。
端末がスリープ状態にある時に、Eclipseからデバッグ目的でアプリを起動すると、onSaveInstanceStateメソッド&onDestroy()が繰り返し呼ばれる。この問題に対して、AndroidManifest.xmlにおいてandroid:launchMode="singleTop"を施してみたが、効果は無かった。
@Override
protected void onDestroy(){
int iConfig = getChangingConfigurations();
iConfig &= ActivityInfo.CONFIG_ORIENTATION;
if(iConfig>0){
Log.d(TAG, "onDestroy() : ConfigurationChange");
}
参考
Android: onSaveInstanceState not being called from activity
0 件のコメント:
コメントを投稿