1

Android OS がアクティビティ スタックの最上位にないアクティビティを閉じると、静的変数の一部が null になることに気付きました。変数が以前にオブジェクトを指していたこと、そして私が自分でそれらの値を変更しなかったことは絶対に確信しています。

アクティビティの再作成後、nullPointerException を取得すると、静的変数 (アプリケーションのサブクラス onCreate で初期化され、プロセス ライフサイクルのどの時点でも null ではないはず) の 1 つが null になります。

変数を null にするのは私ではないので、メモリ不足のためにバックグラウンド アクティビティを閉じて静的変数を null にするのは Android OS だと思います。出来ますか?

4

2 に答える 2

2

Android は、アクティビティ スタックの最上位にないアクティビティを閉じません。アプリケーションがバックグラウンドになり、Android がメモリを再利用する必要があると判断した場合、アクティビティをホストするプロセスを強制終了します。ユーザーがアプリケーションに戻ると、Android は新しいプロセスを作成し、アクティビティ スタックの一番上にあったアクティビティを再作成します。

ほとんどの場合、それがあなたが見ているものです。明らかに、プロセスが強制終了されて再作成された場合、静的変数は null になります。

于 2012-08-09T13:42:43.427 に答える
1

アクティビティが実行されていた基になる VM/スレッドが強制終了された場合にのみ、それらは null になります。その後、アプリケーションを完全に再起動しているようです。何かを保持する必要がある場合は、静的変数に依存しないでください。DB または設定に保存してください。

于 2012-08-09T13:22:56.427 に答える