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