質問: 現在、使うリストの絞り込み条件をインスタンス化しないクラスのstaticフィールドに入れて管理しています。 そこでふと思ったのですが、staticフィールドの寿命ってどこまで持つのでしょうか? javaの基本的な仕組みとして、「何者からも参照されないオブジェクトは破棄され、 それが使っていたメモリはガベージコレクタの対象になる」というものがありますよね? ところがstaticフィールドはインスタンスに関連づかないので、この理屈で行くと 「常に参照され続けている」値ということになります。 となると「アプリが起動している間」なのかとも思ったのですが、ちょっと「?」な現象があります。 以前リストそのものをActivityのstaticフィールドに格納していたことがあり、 リストがnullの場合にネットワークから読み込み直す、という仕組みにしていたのですが、 一旦アプリを終了して起動し直すと、大体はリストがnullではない挙動をしていました。 (ちなみにタスクキルの動作をすると即座にnullになる模様) となるとアプリやActivityと結びついているわけではない・・・と、よくわからなくなってしまいました。 この辺り詳しい方がいらっしゃいましたら、教えてください。
回答: > そこでふと思ったのですが、staticフィールドの寿命ってどこまで持つのでしょうか? > [...] > ところがstaticフィールドはインスタンスに関連づかないので、この理屈で行くと > 「常に参照され続けている」値ということになります。 その理解で正しいです。そのプロセスが終了するまでstaticフィールドから参照され続け(=インスタンスが生き続け)ます。("アプリ"ではない事に注意してください) > となると「アプリが起動している間」なのか > [...] > (ちなみにタスクキルの動作をすると即座にnullになる模様) > となるとアプリやActivityと結びついているわけではない・・・と、よくわからなくなってしまいました。 その推測も正しいです。Android内部では、アプリケーション ≠ プロセス となっています。アプリを終了させても内部的にはプロセスが残りますし、タスクキルは明示的にプロセスを終了させる動作そのものです。 この動作は通常OSのアプリケーションライフサイクルと異なるので、はまりどころな気がします。ライフサイクルの理解 その2 Process などで解説されています。