0

私は壁紙アプリに取り組んでいます。すべての画像を Drawable フォルダーに保存しています。

OutOfMemoryError30枚以上の壁紙を追加すると取得できます。これを克服する方法を知りたいです。

すべての画像を保存してSQLite Databaseそこからロードする必要がありますか、それとも何か他のことをする必要がありますか?

ビットマップのサイズを変更しようとしDecode Bitmap Factoryましたが、画像の品質が低下するため、目的を達成できませんでした。

4

3 に答える 3

1

デコード時に画像のサイズを変更しても、OutOfMemoryError先に進むだけです。このエラーは、アプリケーションでメモリ リークが発生したか、利用可能なメモリよりも多くのメモリを使用しようとしたことを意味します。Android でビットマップを操作する場合、これは非常に頻繁に発生します。これは、上限が 25MB 前後に設定されており、高解像度の画面がますます一般的になっているためです。

アプリケーションを再設計する必要があります。1 つの画面に収まらないため、メモリに 30 枚の画像を保持する必要はありません。サムネイル サイズの場合は、デコード時にすべてのサイズを変更し、メモリ内のピクセルの合計数は単一の大きな画像なので、メモリが不足することはありません。

recycle()ビットマップが表示されていない場合は、ビットマップへの方法を見つける必要があります。アプリケーションをより適切に説明していただければ、適切なタイミングを見つけ、画像をプリロードしてアプリケーションの応答性を高め、ユーザー エクスペリエンスを向上させることができます。

于 2012-12-26T18:34:45.533 に答える
0

Thumbnailsあなたがする必要があるのは、描画可能な画像の代わりに画面に表示することだと思います。サムネイルを生成し、サイズ要件に従って表示できます。ユーザーが をクリックするたびにThumb、元のパスを取得して壁紙を設定します。

もう 1 つのオプションは、Universal Image Loaderを使用することです。これは、イメージをディスクにバッファリングするのに役立ちます (SD cardまたはアプリケーションのInternal memoryなど)。したがって、問題はOut of Memory解決できます。

于 2012-12-29T08:47:10.333 に答える
-1

アプリケーションのクラッシュを制御したい場合は、コードをExceptionブロックに記述します。

try {

    ...

    }
    catch(OutOfMemoryError error)  {
        //decide what to do when there is not more memory available
    }

また、このリンクをしてください:

リンク

于 2012-12-29T08:55:47.567 に答える