引起:java.lang.OutOfMemoryError

时间:2015-05-01 09:34:43

标签: java android out-of-memory

我有一个布局文件和5个按钮 - 下一个1和前一个2等。应用运行正常,当我点击第一个按钮,它正确加载图像,然后当我点击另一个按钮,它给出错误 - Caused by java lang Out Of Memory Error

public class MainActivity extends ActionBarActivity {

private ShareActionProvider mShareActionProvider;

ImageButton btn1;
ImageButton btn2;
ImageButton btn3;
ImageButton btn4;
ImageButton btn5;
ImageButton btn6;
ImageButton btn7;
ImageButton btn8;
ImageView image1;



@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    addListenerOnButton();
    addListenerOnButton2();
    addListenerOnButton3();
    addListenerOnButton4();
    addListenerOnButton5();
    addListenerOnButton6();


}

public void addListenerOnButton() {

    btn1= (ImageButton) findViewById(R.id.btn1);
    btn1.setOnClickListener(new View.OnClickListener()
    {
        @Override
        public void onClick(View view)
        {
            setContentView(R.layout.show);
        }

    }
    );
}

public void addListenerOnButton2() {

    btn2= (ImageButton) findViewById(R.id.btn2);
    btn2.setOnClickListener(new View.OnClickListener()
                            {
                                @Override
                                public void onClick(View view)
                                {
                                    setContentView(R.layout.k2);
                                }
                            }
    );
}

public void addListenerOnButton3() {
    final Context context =this;
    btn3= (ImageButton) findViewById(R.id.btn3);
    btn3.setOnClickListener(new View.OnClickListener()
                            {
                                @Override
                                public void onClick(View view)
                                {
                                    setContentView(R.layout.k3);
                                }
                            }
    );
}

public void addListenerOnButton4() {
    final Context context =this;
    btn4= (ImageButton) findViewById(R.id.btn4);
    btn4.setOnClickListener(new View.OnClickListener()
                            {
                                @Override
                                public void onClick(View view)
                                {
                                    setContentView(R.layout.k4);
                                }
                            }
    );
}

public void addListenerOnButton5() {
    final Context context =this;
    btn5= (ImageButton) findViewById(R.id.btn5);
    btn5.setOnClickListener(new View.OnClickListener()
                            {
                                @Override
                                public void onClick(View view)
                                {
                                    setContentView(R.layout.k5);
                                }
                            }
    );
}

public void addListenerOnButton6() {
    final Context context =this;
    btn6= (ImageButton) findViewById(R.id.btn6);
    btn6.setOnClickListener(new View.OnClickListener()
                            {
                                @Override
                                public void onClick(View view)
                                {
                                    setContentView(R.layout.k6);
                                }
                            }
    );
}

1 个答案:

答案 0 :(得分:1)

您正在更改整个布局,而不是更改图像。当你这样做时,不会调用垃圾收集器,你应该自己调用它。由于它没有被调用,你很快就会得到那个错误。

这样做

int[] imageArray = {R.drawable.image1, R.drawable.image2, ... };

当您点击按钮时,只需执行

  btn1.setOnClickListener(new View.OnClickListener()
                            {
                                @Override
                                public void onClick(View view)
                                {
                                    someImageView.setImageResource(imgageArray[0])
                                }
                            }

另外请确保不要使用太大的图像。占用了大量的记忆。