2012-01-15 3 views
1

私は、ビットマップオブジェクトの束をインスタンス化するアプリ開発しています(キャッシュビットマップを持っているなどのボタンを、ので、彼らは何度も何度もレンダリングを取得する必要はありません)アンドロイド:今すぐアプリにメモリをクリーンアップ破壊

私はhuaweiモバイルデバイスでアプリケーションを繰り返し実行して起動すると、アプリケーションがビットマップ用にいくつかのメモリを割り当てようとしているところでOutOfMemoryExceptionを取得することに気付きました。 だから私はそれが問題を作るビットマップだと思います。私はbitmap.recycle()メソッドがあることを知っています。

今私の質問:メモリをクリーンアップするのがベストプラクティスですか? なぜクリーンアップ目的で実装できるView :: onDestroy()のようなViewメソッドがありませんか?

編集:だから私は、この割り当てられたデータがどこかにリサイクルする必要がありますね

@Override 
    protected void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 
     canvas.drawBitmap(this.getDefaultBitmap(), 0, 0, paint); 
    } 
    private Bitmap getDefaultBitmap(){ 
     if(mBitmapDefault == null){ 
      mBitmapDefault = Bitmap.createBitmap(8*radius, 8*radius, Config.ARGB_8888); 
      Canvas canvas = new Canvas(mBitmapDefault); 
      this.drawDefault(canvas); 
      return mBitmapDefault; 
     } 
     return mBitmapDefault; 
    } 

...:例

私の "CirclyButton"(ボタンを拡張する)クラスは常にキャッシュビットマップonDrawを描きますか?

答えて

2

ビューには通常、ビューが破棄されないため、onDestroyメソッドがありません。アクティビティは行いません。ビューは、アクティビティに何も起こらなければ破壊されるだけではありません(別のレイアウトを展開しない限り...そうではありません)。何かアクティビティが発生した場合、コールバックが呼び出されます。

recycle()メソッドがある場合は、必ず呼び出してください。そして、すなわち、onDestroyにメモリ服用オブジェクトへすべての参照を削除します。

@Override 
public void onDestroy() { 
    object1 = null; 
    object2 = null; 
    //... 
} 

だからGCはその仕事をすることができます。 AdMobの AdViewにも同じ問題がありましたが、実際には役に立たなかった destroyメソッドがありました。しかし、ビューの私の参照を削除することで問題が解決されました。

+0

ですが、これを行うには便利な方法がいくつかあります。いくつかのボタンがあるかもしれないと思ってください。 – stoefln

+0

それらを配列に格納し、それらを繰り返します。これらはレイアウトやコードで作成されていますか?コード内の – Jong

+0

うーん、私は分からない...ちょうどそれがいくつかのオブジェクトを見逃すことが簡単だと思います... – stoefln

1

ビットマップをどこで使用しているかについてより多くの情報を提供します。私は画像で作業してメモリを節約した経験があります。

たとえば、私のアプリでは、いくつかのデータのリストがあり、各行にビットマップが表示されます。私はフラグメントをサポートしています(私は互換性ライブラリを使用しています)。私はこのフラグメントonDestroyメソッドでビットマップをリサイクルしました。

後でリストを最適化することにしたので、スクロールリスナーをリストに追加し、画面からスクロールしてビットマップのリサイクルを開始しました。

+0

いいですね!私の質問を更新しました – stoefln

+0

これで、フラグメントやアクティビティのレイアウトによっては、このボタンを使っている場所はどこですか?私が今お勧めできるのは、それを保持するアクティビティやフラグメントがonDestroyになっているときにこのイメージをリサイクルすることです。 – Orest

+0

ViewGroup内。 – stoefln

関連する問題