Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android studio:176947212字节分配内存不足_Java_Android - Fatal编程技术网

Java Android studio:176947212字节分配内存不足

Java Android studio:176947212字节分配内存不足,java,android,Java,Android,在我的android studio项目中,我发现了以下问题: “E/dalvikvm堆:176947212字节分配的内存不足。” 在我将照片放入“可绘制”后,我使用了“图像切换器”,因此图像 一个接一个的更改,当它出现在第八张图片中时,会比应用程序的更改次数多 我注意到这是内存问题。。 所以,我不知道我会怎么做 这是我代码的一部分: public class Fruits extends AppCompatActivity { private String answers[] = {"oran

在我的android studio项目中,我发现了以下问题: “E/dalvikvm堆:176947212字节分配的内存不足。” 在我将照片放入“可绘制”后,我使用了“图像切换器”,因此图像 一个接一个的更改,当它出现在第八张图片中时,会比应用程序的更改次数多
我注意到这是内存问题。。 所以,我不知道我会怎么做

这是我代码的一部分:

public class Fruits extends AppCompatActivity {

private String answers[] = {"orange" , "apple" , "banana" , "grape" , "ananas" , "cheries" , "kiwi" , "pear" ,
        "strawberry" , "watermelon", "apricot" , "clementine" , "guava" , "nectarine" , "fig"};
private int[] im = {R.drawable.orange,R.drawable.apple,R.drawable.banana,R.drawable.grape,
        R.drawable.ananas,R.drawable.cherries,R.drawable.kiwi,R.drawable.pears,R.drawable.strawberry,R.drawable.watermelon,
        R.drawable.apricot,R.drawable.clementine,R.drawable.guava,R.drawable.nectarine,R.drawable.fig};

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_fruits);
    start();
    ok = (Button)findViewById(R.id.ok);
    edit = (EditText)findViewById(R.id.edit);

    scores = (TextView)findViewById(R.id.score_num);
    mimage = (ImageSwitcher)findViewById(R.id.image);

    mimage.setFactory(new ViewSwitcher.ViewFactory() {
        @Override
        public View makeView() {
            ImageView imagev = new ImageView(getApplicationContext());
            imagev.setScaleType(ImageView.ScaleType.FIT_CENTER);
            return imagev;
        }
    });
    mimage.setImageResource(R.drawable.orange);
    start();

    ok.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View v) {
            if(edit.getText().toString().equals(answers[k]))
            {
                k++;
                Toast.makeText(Fruits.this, "correct", Toast.LENGTH_SHORT).show();
                sc = sc + 10;
                update_score(sc);
                mimage.setImageResource(im[k]);
                update_edit();
            }
            else
            {
                if(edit.getText().toString().equals(""))
                    Toast.makeText(Fruits.this,"put a name",Toast.LENGTH_LONG).show();
                else
                {
                    k++;
                    Toast.makeText(Fruits.this, "wrong", Toast.LENGTH_SHORT).show();
                    mimage.setImageResource(im[k]);
                    update_edit();
                }
            }
        }
    });

}

public void start()
{
    time = (TextView)findViewById(R.id.timer);
    time.setText("00:00");
    cdt = new CountDownTimer(90 * 1000, 1000) {
        @Override
        public void onTick(long millisUntilFinished) {
            time.setText("" + millisUntilFinished / 1000);
        }
        @Override
        public void onFinish() {
            time.setText("done");
            Intent i = new Intent(Fruits.this,End.class);
            i.putExtra("score", sc);
            startActivity(i);
        }
    };
    cdt.start();
}

public void update_score(int i) { scores.setText("" + i); }
public void update_edit(){ edit.setText(""); }

}
最后,这是我的虚拟设备的内存部分:

在我把照片放在“可绘制”中之后


不要将它们放在
res/drawable/
中。这是
res/drawable mdpi/
的同义词,它将导致Android在更高密度的屏幕上对这些图像重新采样,从而提高内存使用率。将它们放在
res/drawable nodpi/

中,这是很多字节,大约176MB。你为什么感到惊讶?你确定需要这么大的图像吗?压缩图像。使用在线工具,使用毕加索(图书馆),并使其尺寸更小(为什么有1024x1024当你可以有256x256)谢谢,但我不知道我使用的说明!!这是一个相当大的图像…即使如此,考虑到xxxhdpi重采样,原始图像是1440x1920。还是挺大的。@njzk2:同意。将全尺寸照片作为可绘制资源通常不是一个好计划。谢谢,但我如何访问该文件(res/drawable mdpi/),我指的是构造?@saidbus:所有可绘制资源都以相同的方式引用(
R.drawable.whatever
在Java中,
@drawable/whater
在资源和清单中)。