2

私が理解しているように、アプリが破壊され、アプリの「見かけのライフサイクル」で数回再作成される可能性があるため、シングルトンがAndroidアプリで永続データを保持することは期待できません。これ自体は私にとって問題ではありません。問題は、アプリがこの破棄->作成プロセスを通過したときに正確に何が起こるかにあります。

私はフォーラムでアプリが新しいプロセスで再作成されることを読みました、そして私はすべてのメモリ管理を備えた古いプロセスが破壊されると思います。ただし、これは、相互参照を保持するノードを持つすべてのシングルトンと論理ツリーをクリーンアップするのは開発者の責任であることを意味しますか?または、プロセスを破棄すると、すべてが自動的にクリーンアップされますか?私は経験豊富なJava開発者ではないので、GCについてはまだ多くのことがわかりません。

私が取り組んでいる特定のプロジェクトは、デバイスの稼働時間全体で1つのアプリのみを実行します。デスクトップ用語では、アプリケーションはデバイスのシャットダウン時にのみシャットダウンし、常に同じプロセスで動作するため、シングルトンを介したメモリリークの危険性はありません。ただし、Androidではさらに困難になります。

ちなみに、エミュレータを使用するAndroid用の優れたメモリリーク検出器は何ですか?

4

1 に答える 1

3

基本的に、UI要素への参照を維持することは避けなければなりません。そのUI要素は、破棄される可能性のあるアクティビティのコンテキストにバインドされています。

それを実施するためにApplicationクラスを拡張するよりも1つが本当に必要な場合。このインスタンスは、アクティビティが閉じたときやローテーションなどで破棄されることはありません。

また、コードでそのイベントを処理できることも知っておく必要があります。つまり、アクティビティを再開してはなりません。私見では、アクティティを再開することはほとんど意味がありません。これを実装するには、マニフェストにconfigChanges属性を追加する必要があります。私は個人的にこの設定を使用します:

<activity android:configChanges="orientation|screenSize|keyboardHidden" ...>
于 2013-03-24T11:02:46.273 に答える