画面遷移を行ったときにActivityがどのように管理されるかは、公式のドキュメントがあります。
タスクとバックスタック - Android Developers APIガイド
他にも、"Android スタック"といったキーワードで調べれば、日本語による資料も多く見つけられるでしょう。
Androidでは画面遷移の順序を管理するために、スタックという後入れ先出し方式の構造を持っています。Intentで新たなActivityを呼び出すと、その情報をスタックに上積みしていきます。それは呼び出したことのあるActivityをIntentで再呼び出した場合も同様で、既にスタックに存在するActivityをフォアグラウンドに回しているわけではありません。Intentにフラグをセットして指示をすることで、既にスタックに積まれているものを全て破棄しつつ呼び出すなど特殊な制御は多々ありますが、特にフラグをセットせずに呼び出したのならば、単純に呼び出しただけスタックには情報が積み重ねられていきます。
例として、TextViewを持つActivityをIntentで2回呼び出して、一方のTextViewのテキストを書き換えても、他方のTextViewは変化しないはずです。このことからも、それらのインスタンスは独立して存在していることがわかるでしょう。そういう意味では、「呼ぶ度に溜まっているのでは」という指摘は正しいと言えるでしょう。
ただし、通常は次々と新たなActivityを呼び出してメモリーが足りなくなってくると、スタックの底の方にあるActivityを強制的に破棄するようになっています(Backキーなどで後戻りしていき、破棄されたActivityが表に出る順番になったときは、再呼び出しする仕組みになっているので、破綻することはない・・・はず)。ですから、少しずつメモリーを消費するActivityを次々と呼ぶ限りはOOMになるようなことはない・・・はずなのですが、今回の質問の内容だと一気にメモリーを消費するActivityを呼び出したため、そうした処理が間に合わずに吹っ飛んでいるのではないのでしょうか。
という推測です。
構造上は上記のようなタテマエはあるものの、昔のメモリーが少ない端末なんかでは、ちょっと複雑なActivityを数回呼び出す程度でもボコボコOOMで吹っ飛んでいたような。という余談。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/03/09 21:19