2016-07-17 2 views
0

Androidのうち

public class MyActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
      WindowManager.LayoutParams.FLAG_FULLSCREEN); 
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 

    // CODE FOR PUTTING BITMAP ON BACKGROUND 
    String pathName = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).toString() 
      + "/Backgrounds/0.png"; 
    Resources res = getResources(); 
    Bitmap bitmap = BitmapFactory.decodeFile(pathName); 
    BitmapDrawable bd = new BitmapDrawable(res, bitmap); 
    View view = findViewById(R.id.screen1); 
    view.setBackgroundDrawable(bd); 
    } 
はビットマップが唯一310Kである

次のコードとすべての私の活動の(10)

上の同じビットマップを使用している場合にのみoccasionallメモリ不足エラーを取得

イム

1つのアクティビティから別のアクティビティに素早く連続して切り替えるときに発生する傾向があります。

どのようにすればより効率的にすることができますか?

すべてのヘルプは

マーク

+0

'ビットマップは310kです。あなたは 'PNGファイルは310KBだけです'という意味ですか?ビットマップはより多くのメモリを占有します。 – greenapps

+0

310kbはあなたのPNG画像の*圧縮*サイズです。メモリにロードされたときに**メモリ**サイズと呼ばれ、それは異なる場合があります(一般的にはそれ以上)。 OOMの原因は、ビットマップの**メモリサイズです**。割り当てようとしているメモリの量を確認する必要があります。 提案:アンドロイドの画像読み込みライブラリを使用してください。 –

+0

"System.gc();"を追加できます。メモリをクリアするためにアンドロイドガベージコレクタを強制するコマンド。 – acac97

答えて

0

評価されてあなたのビットマップが最も可能性がありますどのように大きな問題ではありません。 OOMを取得すると、システム全体がメモリ不足になっていることを意味します。たとえば、10MBのヒープがあり、9.999MBを割り当てて100バイトを割り当てた場合、100バイトは例外をスローします(実際にはメモリ不足のため)。本当の問題は最初の配分でした。

System.gcを使用するのは恐ろしいハックですが、実際には問題を解決するわけではありません。それはあなたが最高の状態で見ていることを遅らせるだけです。あなたにはメモリリークがあります。このメモリリークを修正する必要があります。リークは、あなたのActivityオブジェクトへのリークされた参照に関するものです。あなたのアプリに戻り、ヒーププロファイラーを実行して、漏れがどこにあるか把握してください。

関連する問題