2

私はAndroidのアクティビティのライフサイクルに精通していますが、ここでかなり明白なはずの何かが欠けているように感じます。

マルチアクティビティのAndroidアプリを持っています。(アプリケーションクラスの)静的変数を使用して、さまざまなビューで使用されるさまざまなオブジェクトのハンドルを保持します。この問題は、アプリが一時停止(終了)し、Android(おそらく)がフォアグラウンドプロセスを維持するためにメモリをクリーンアップするときに発生します。ユーザーがアプリを再開すると、ときどき(常にではない)、ユーザーが残したアクティビティで再開して再開するように見えますが、静的変数はnullになっています。さらに悪いことに、静的変数がまだ存在しているが、オブジェクトの内部変数がnullになっていると、アクティビティが再開するように見えることがあります。

最終的に、単純な健全性チェックを実装しました。これは、統計がnullになっていないこと(および関連するオブジェクトの最も重要な内部変数)をチェックし、失敗した場合にアプリを起動するように返します。これにより、問題が大幅に削減されましたが、resume()ごとにすべてをチェックすることは実際的ではないため、これには時折問題が発生することがあります。

私が本当に必要としているのは、Android OSが、アプリが非アクティブのときにメモリからGC以外のものをすべてクリーンアップする必要があると判断した場合に、アプリを最初から再起動することです。これを行うには優雅な方法があるはずだと思いますが、ドキュメントには何も気づいていません。

何かご意見は?他の人はこの問題をどのように回避しますか?

4

1 に答える 1

4

状態を保持するためにApplicationクラスを使用すると、Androidがプロセスを完全に強制終了することを決定した場合、予期しない動作が発生する可能性があります。同様の質問に対するこの回答を確認してください 。つまり、アクティビティライフサイクルコールバックで何らかの永続性(SharedPreferencesまたはDB)を使用する必要があります。

于 2012-09-08T23:58:15.643 に答える