1

アプリケーションには 20 から 25 のアクティビティがあり、各アクティビティは 1 つの共通の基本アクティビティを拡張します。各アクティビティには、800*1024 のようなサイズの背景画像が 1 つあります。この背景画像はベースアクティビティで設定されています。

これらの画像を表示するために、デバイスの幅と高さに基づいてスケーリングを計算しました。このスケールをinSampleSizeofに設定してからBitmapFactory.Options、ビットマップを再作成しました。

onDestroy各アクティビティとベース アクティビティのメソッドでビットマップを再利用しました。

画像のサイズを変更してビットマップをリサイクルしていますがOutOfMemoryError、しばらく実行した後です。

これを回避する方法を教えてくださいOutOfMemoryError

4

3 に答える 3

0

ここで、アクティビティでは、アクティビティが呼び出されたlifecycle後にユーザーに表示されることがわかります。したがって、コードを記述して、メソッドResumeでビットマップを作成および設定できます。onResume()同様に、あなたのアクティビティが に入るとbackgroundonStop()が呼び出されます。したがって、この段階で記憶を解放することをお勧めします。

あなたのアプローチでは、アクティビティがdestroyedの場合、メモリを解放しています。ただし、これを行う代わりに、アクティビティがユーザーに表示されると、allocateメモリとfreeアクティビティが非表示になります。

編集:

でビットマップを解放することもできonPause()ますが、これを行うと、最初の背景が黒くなり、次にアクティビティが変更されることがわかります。

アクティビティのライフサイクル

于 2013-01-23T10:42:37.953 に答える
0

この目的には AQuery(Android Query) を使用する必要があります。この API は使いやすく、メモリ エラーを自動的に処理します。多くのオプションでアプリを強化します。

これはここからダウンロードできます:

AndroidQuery.jar

ここから説明を取得できます:

Android クエリの完全な詳細

画像固有のオプションについては、次の場所にアクセスしてください。

Android クエリ画像ドキュメント

于 2013-01-23T10:58:52.770 に答える
0

"BitmapFactory.options" を設定するときは、コードを確認してください。通常、UI の作成には時間がかかります。したがって、UI を作成する前に BitmapFactory.options を設定すると、getWidth()/getHeight() メソッドから 0 が返されます。サンプルサイズに 0 を設定しても何も起こりません。UI の作成後に BitmapFactory.options を設定する必要があります。

于 2013-01-23T10:44:01.937 に答える