0

ユーザーが特定のセッションで画面内を移動できるように、6〜100個の小さなビットマップを動的に生成するアプリがあります。私は現在それらを生成しonCreateてSDカードに保存しているので、向きを変えた後、それらを外部ストレージから取り出して再び表示することができます。ただし、これには時間がかかり(読み込み)、ライフサイクルの変更の合間にビットマップ参照を保持して、より迅速にアクセスできるようにしたいと思います。

私の質問は、生成されたビットマップを保存するためのより良い場所はありますか?基本アクティビティで静的ストレージライブラリを作成することを考えていました。これは、アプリがメモリから完全に削除されたときにのみ再ロードする必要があります(シャットダウン、他のアプリにはリソースが必要、30分の再起動など)。

理想的には、ユーザーがタイトル画面に戻って[再開]ボタンをクリックできるようにしたいのですが、onCreateストレージから再度ロードする代わりに、これらの常駐ビットマップ参照にアクセスできます。このため、私はActivity.onRetainNonConfigurationInstance必要なものではないと思います。

あるいは、私が行っていることや私が説明した計画よりも、生成された複数のビットマップを処理するためのより良い方法はありますか?

4

1 に答える 1

5

向きの変更時に生成されたビットマップを保持することについてのRomainGuyのブログ投稿を必ずチェックしてください。これはほぼ同じケースのように聞こえます。その要点は、/を使用onRetainNonConfigurationInstancegetLastNonConfigurationInstanceて、オリエンテーション関連のアクティビティ破壊全体で任意のオブジェクトを通過/受信できることです。ただし、これは、アクティビティを取り消して最初からやり直すのには役立ちません。

ビットマップを静的キャッシュのようなオブジェクト(おそらくApplicationクラスのSoftReference HashMap )に詰め込むこともできますが、DrawableまたはViewsを格納しないように注意してください。これにより、含まれているActivityへの参照のためにメモリリークが発生する可能性があります。これはアプリケーション全体の存続期間中持続しますが、グローバル状態が醜い問題を引き起こし、アクティビティインスタンスを参照している場所でメモリリークを見つけるのが難しいため、可能な限り回避します。

于 2010-06-15T17:29:50.740 に答える