2016-10-09 53 views
0

我向用戶顯示了一系列問題。在每個問題中,我將drawables設置爲6個圖像瀏覽。唯一的問題是RAM的使用量在我進入下一個屏幕時增加了大約60MB。將內存設置圖像縮小爲圖像查看

我不明白爲什麼會發生這種情況,因爲我只是用另一個替換圖片?大約5次屏幕後,由於內存分配失敗,應用程序崩潰。我怎麼會釋放這個屏幕的內存,所以它沒有建立起來。

在此先感謝。

public class Test extends ActionBarActivity { 

    ImageButton a1; 
    ImageButton a2; 
    ImageButton a3; 
    ImageButton a4; 
    Intent result; 
    String correctOrWrong = ""; 
    int question; 
    int amountOfC = 0; 
    int numCorrect; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_test); 

     getSupportActionBar().hide(); 

     ImageView qMain = (ImageView) findViewById(R.id.qMain); 
     a1 = (ImageButton) findViewById(R.id.a1); 
     a2 = (ImageButton) findViewById(R.id.a2); 
     a3 = (ImageButton) findViewById(R.id.a3); 
     a4 = (ImageButton) findViewById(R.id.a4); 
     ImageView qTitle = (ImageView) findViewById(R.id.qTitle); 


     a1.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       nextQ(1); 
      } 
     }); 

     a2.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       nextQ(2); 
      } 
     }); 

     a3.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       nextQ(3); 
      } 
     }); 

     a4.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       nextQ(4); 
      } 
     }); 

     Intent qGet = getIntent(); 
     question = qGet.getIntExtra("QNUMBER", 1); 
     numCorrect = qGet.getIntExtra("NUMCORRECT", 1); 

     Log.d("lel", String.valueOf(question)); 

     if (question == 1) { 
      qMain.setBackgroundResource(R.drawable.q1); 
      a1.setBackgroundResource(R.drawable.a13); 
      a2.setBackgroundResource(R.drawable.a12); 
      a3.setBackgroundResource(R.drawable.a11); 
      a4.setBackgroundResource(R.drawable.ca1); 
      qTitle.setBackgroundResource(R.drawable.q1t); 

     } else if (question == 2) { 
      qMain.setBackgroundResource(R.drawable.q2); 
      a1.setBackgroundResource(R.drawable.q23); 
      a2.setBackgroundResource(R.drawable.q2a); 
      a3.setBackgroundResource(R.drawable.q22); 
      a4.setBackgroundResource(R.drawable.q21); 
      qTitle.setBackgroundResource(R.drawable.q2t); 
     } else if (question == 3) { 
      qMain.setBackgroundResource(R.drawable.q3); 
      a1.setBackgroundResource(R.drawable.q31); 
      a2.setBackgroundResource(R.drawable.q32); 
      a3.setBackgroundResource(R.drawable.q33); 
      a4.setBackgroundResource(R.drawable.q3a); 
      qTitle.setBackgroundResource(R.drawable.q3t); 
     } else if (question == 4) { 
      qMain.setBackgroundResource(R.drawable.q4); 
      a1.setBackgroundResource(R.drawable.q4a); 
      a2.setBackgroundResource(R.drawable.q43); 
      a3.setBackgroundResource(R.drawable.q42); 
      a4.setBackgroundResource(R.drawable.q41); 
      qTitle.setBackgroundResource(R.drawable.q4t); 
     } else if (question == 5) { 
      qMain.setBackgroundResource(R.drawable.q5); 
      a1.setBackgroundResource(R.drawable.q53); 
      a2.setBackgroundResource(R.drawable.q5a); 
      a3.setBackgroundResource(R.drawable.q52); 
      a4.setBackgroundResource(R.drawable.q51); 
      qTitle.setBackgroundResource(R.drawable.q5t); 

回答

0

不處理圖像內存/緩存自己,而是使用一個庫如滑翔 - https://github.com/bumptech/glide

嘗試acitvity的清除的ImageView的onDestroy()

a1.setImageDrawable(null); 
a2.setImageDrawable(null); 
a3.setImageDrawable(null); 
a4.setImageDrawable(null); 
0

如下圖所示,您需要爲每個位圖調用回收():

a1.setImageDrawable(null); 
a2.setImageDrawable(null); 
a3.setImageDrawable(null); 
a4.setImageDrawable(null); 
a1.recycle(); 
a2.recycle(); 
a3.recycle(); 
a4.recycle();