質問編集履歴

2

onSaveInstanceState()について追記

2019/03/29 02:29

投稿

tadanoosakana
tadanoosakana

スコア30

test CHANGED
File without changes
test CHANGED
@@ -98,6 +98,22 @@
98
98
 
99
99
 
100
100
 
101
+ https://stackoverflow.com/questions/44256250/does-viewmodel-survive-activity-save-and-restore
102
+
103
+
104
+
105
+ > the ViewModel is destroyed if your process is killed by Android.
106
+
107
+
108
+
109
+ システムによってキルされた場合、ViewModelさんも死んでしまうみたいですね。
110
+
111
+ しかし、できれば `onSaveInstanceState()` を使いたくないのですよねぇ。
112
+
113
+ ProviderをいじるなどのViewModelの管理方法をいじる程度で対処できればいいのですが、それが無理なのであれば、諦めますけど。
114
+
115
+
116
+
101
117
  ### コード・出力結果
102
118
 
103
119
 

1

コードの全体の掲載

2019/03/29 02:29

投稿

tadanoosakana
tadanoosakana

スコア30

test CHANGED
File without changes
test CHANGED
@@ -104,9 +104,111 @@
104
104
 
105
105
  ```Kotlin
106
106
 
107
+ package sakana.tadano.androidsampleapp.views
108
+
109
+
110
+
111
+ import android.app.Activity
112
+
113
+ import android.content.Intent
114
+
115
+ import android.os.Bundle
116
+
117
+ import android.view.MenuItem
118
+
119
+ import androidx.appcompat.app.AppCompatActivity
120
+
121
+ import androidx.core.view.GravityCompat
122
+
123
+ import androidx.lifecycle.Observer
124
+
125
+ import androidx.lifecycle.ViewModelProvider
126
+
127
+ import androidx.lifecycle.ViewModelProviders
128
+
129
+ import kotlinx.android.synthetic.main.activity_main.*
130
+
131
+ import sakana.tadano.androidsampleapp.R
132
+
133
+ import sakana.tadano.androidsampleapp.viewmodels.Activity1ViewModel
134
+
135
+
136
+
137
+ class Activity1 : AppCompatActivity() {
138
+
139
+
140
+
141
+ init {
142
+
143
+ println("Activity1::init")
144
+
145
+ }
146
+
147
+
148
+
107
- val viewModel by lazy {
149
+ val viewModel by lazy {
108
-
150
+
109
- ViewModelProviders.of(this@Activity1).get(Activity1ViewModel::class.java)
151
+ ViewModelProviders.of(this@Activity1, ViewModelProvider.AndroidViewModelFactory(this.application)).get(Activity1ViewModel::class.java)
152
+
153
+ }
154
+
155
+
156
+
157
+ override fun onCreate(savedInstanceState: Bundle?) {
158
+
159
+ super.onCreate(savedInstanceState)
160
+
161
+
162
+
163
+ // xmlとコードを紐付ける。
164
+
165
+ this.setContentView(R.layout.activity_main)
166
+
167
+
168
+
169
+ // ボタンを押すと画面遷移をする。
170
+
171
+ this.floatingActionButton.setOnClickListener { this.startActivity2() }
172
+
173
+
174
+
175
+ println("Activity1.onCreate() | Activity1: ${this.hashCode()}, Activity1ViewModel: ${this.viewModel.hashCode()}")
176
+
177
+ }
178
+
179
+
180
+
181
+ override fun onDestroy() {
182
+
183
+ println("Activity1.onDestroy()")
184
+
185
+ super.onDestroy()
186
+
187
+ }
188
+
189
+
190
+
191
+ // Activity2を開始する。
192
+
193
+ private fun startActivity2() {
194
+
195
+ val intent = Intent(this, Activity2::class.java).also {
196
+
197
+ it.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION)
198
+
199
+ it.addFlags(Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY)
200
+
201
+ it.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS)
202
+
203
+ it.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP)
204
+
205
+ it.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
206
+
207
+ }
208
+
209
+ this.startActivity(intent)
210
+
211
+ }
110
212
 
111
213
  }
112
214
 
@@ -114,24 +216,6 @@
114
216
 
115
217
 
116
218
 
117
- ```Kotlin
118
-
119
- override fun onCreate() {
120
-
121
-
122
-
123
- // その他の処理
124
-
125
-
126
-
127
- println("Activity1.onCreate() | Activity1: ${this.hashCode()}, Activity1ViewModel: ${this.viewModel.hashCode()}")
128
-
129
- }
130
-
131
- ```
132
-
133
-
134
-
135
219
  ```
136
220
 
137
221
  // 1. "Don't keep activities" が無効なとき: