0

あるアクティビティから別のアクティビティに移行するときのビットマップ メモリ管理に苦労しています。私が見つけた 2 つの最大の助けは、(1) 配列内のフラグメントまたはアクティビティ内のすべてのビットマップを追跡し、onPause() で配列を null にすることと、(2) 移行時に現在のアクティビティで finish() を呼び出すことです。別のアクティビティに。

しかし、finish() を使用すると、以前の状態情報がすべて失われます。

私のビットマップをヌルにすることはできない私のビットマップメモリ​​管理のためにfinish()が何をしているのか誰かが知っていますか?

メモリをクリアするために finish() が行っていることは何でも手動で行いたいと思います。ビットマップを無効にするために使用する「clearBitmap」コードは次のとおりです。

public void onPause()  {
    super.onPause();
    clearBitmaps();
    System.gc();        
}  

public void clearBitmaps()  {       
    if (bitmapArray!=null) {
        for (int i=0; i<bitmapArray.length; i++)  {
            if (bitmapArray[i]!=null)  {
                bitmapArray[i].recycle();
                bitmapArray[i] = null;  
            }                           
        }
        bitmapArray = null;
    }       
}

finish() の代わりに clearBitmap() メソッドを呼び出してみましたが、うまくいきませんでした。

ところで、私はビットマップを効率的にロードし、Android がビットマップ管理のために行うように指示する他のすべてのトリックを実行していますが、まだこの問題があります。私は多くのビットマップを使用していないため、この問題は困惑しています。しかし、アクティビティ間を約 40 回行ったり来たりすると、常にクラッシュします (以前は 6 回だったので、上記の方法で大幅に進歩しました)。

ありがとう!

4

1 に答える 1

0

これは実際には私自身の質問に対する答えではありませんが、メモリ管理の問題に対処し、状態情報を保持するために onBackPressed() を呼び出すことになりました。

于 2013-03-19T02:54:56.120 に答える