减少内存设置image到imageview



我正在向用户显示一系列问题。在每个问题中,我将drawables设置为6个imageviews。唯一的问题是每次我转到下一个屏幕时,内存使用都会增加大约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);

不要自己处理图像内存/缓存,而是使用像glide - https://github.com/bumptech/glide这样的库

尝试清除活动

的imageview onDestroy()
a1.setImageDrawable(null);
a2.setImageDrawable(null);
a3.setImageDrawable(null);
a4.setImageDrawable(null);

您需要在使用每个位图后调用recycle(),如下所示:

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

最新更新