2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

onSaveInstanceState()と回転問題

Posted at

#onSaveInstanceState()
onSaveInstanceState()をoverrideして実装することで、インスタンスの状態を保存することができます。
このメソッドはonStop()の前に呼ばれます。

###メモリの破棄
Activityのライフサイクル上、**onDestroy()**が呼ばれると全てのリソースが開放され、メモリも破棄されてしまいます。
そのため、改めてActivityを生成しても以前の状態は保持できません。

###情報の保存
以前の状態を保つために、Bundleオブジェクトに必要なデータを保存しておき、Activityが再び生成される際に、そのデータを取り出すことができます。

##使い方
###onSaveInstanceState()

companion object {
   const val STATE_INDEX = "index"
}

override fun onSaveInstanceState(outState: Bundle?) {
    outState?.putInt(STATE_INDEX, 1)
    super.onSaveInstanceState(outState)
}

Key-Valueの構造になっているBundleに保存することができます。
ここではInt型のものを保存しています。
ただしValueの型の種類には制限があり、基本的なものしか適応できません。

###onCreate()

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    Log.d("LifecycleActivity", "onCreate(Bundle) called")
    if (savedInstanceState != null) {
        Log.d("LifecycleActivity", savedInstanceState.getInt(STATE_INDEX).toString())
    }
    setContentView(R.layout.activity_lifecycle)
}

onCreate()でsavedInstanceStateから保存したデータを取り出すことができます。

D/LifecycleActivity: onCreate(Bundle) called
D/LifecycleActivity: 1

ただしsavedInstanceStateに何も入っていない場合はnullであるため、取り出し方には注意してください。

#回転問題
スマートフォンを傾けたときに、画面を回転させることができます。
そのときのActivityは実は一度破棄されて、再生成されています。

画面が回転したとき
D/LifecycleActivity: onPause() called
D/LifecycleActivity: onStop() called
D/LifecycleActivity: onDestroy() called
D/LifecycleActivity: onCreate(Bundle) called
D/LifecycleActivity: onStart() called
D/LifecycleActivity: onResume() called

そのため、画面が回転したときも状態を残しておけるように、**onSaveInstanceState()**メソッドを活用する必要がでてきます。

#その他
Activityが明示的に破棄されずとも、停止状態や一時停止状態の時でも、OSの判断によりメモリが破棄されることがあります。
そのときも残しておきたい情報は保存しておくことが必要です。

#参考文献
Understand the Activity Lifecycle
Android Programming: The Big Nerd Ranch Guide (3rd Edition) (Big Nerd Ranch Guides)

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?