我有18个图像,当我和我的应用程序中相互重叠时,会创建一个花。所有图像都被添加到XML文件android:src:'@drawable/blabla..'
中的活动中......但是当我运行我的应用程序时,它会返回错误java.lang.OutOfMemoryError
。请帮助我...我不知道如何解决这个问题。谢谢......
public class PapatyaFaliActivity extends Activity {
private int[] startLeafID={R.id.imag,R.id.birstart,R.id.ikistart,R.id.ucstart,R.id.dortstart,R.id.besstart,R.id.altistart,R.id.yedistart,
R.id.sekizstart,R.id.dokuzstart,R.id.onstart,R.id.onbirstart,R.id.onikistart,R.id.onucstart,R.id.ondortstart,R.id.onbesstart,R.id.onaltistart};
private ImageView[] leafstart=new ImageView[17];
private int[] leafResouseID={R.drawable.papatya_orta,R.drawable.leaf_1,R.drawable.leaf_2,R.drawable.leaf_3,R.drawable.leaf_4,R.drawable.leaf_5,R.drawable.leaf_6,
R.drawable.leaf_7,R.drawable.leaf_8,R.drawable.leaf_9,R.drawable.leaf_10,R.drawable.leaf_11,R.drawable.leaf_12,R.drawable.leaf_13,
R.drawable.leaf_14,R.drawable.leaf_15,R.drawable.leaf_16};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
for(int i=0;i<17;i++){
leafstart[i]=(ImageView) findViewById(startLeafID[i]);
}
for(int i=0;i<17;i++){
leafstart[i].setImageResource(leafResouseID[i]);
}
Thread timerThread=new Thread(){
@Override
public void run() {
try {
sleep(2000);
} catch (Exception e) {
e.printStackTrace();
}finally{
Intent menuIntent=new Intent(getBaseContext(),MenuFrame.class);
startActivity(menuIntent);
}
}
};
timerThread.start();
}
@Override
protected void onPause() {
super.onPause();
for(int i=0;i<17;i++){
leafstart[i].setImageResource((Integer) null);
}
finish();
}
}
答案 0 :(得分:1)
18张图片不是一个大数字。如果你有OutOfMemoryError,这意味着你的图像很大。最简单和最好的方法是将这些图像的分辨率调整(降低)到您真正需要的大小。
如果由于某种奇怪的原因你需要高分辨率的图像,那么你应该使用微缩模型,如果它们以小比例显示,那么一次只能显示一两张图像的全分辨率。 要根据详细程度更改可绘制项目,请使用ImageView.setImageLevel(更改详细信息级别)并将资源定义为LevelListDrawable。
在 onPause 中调用完成是非常糟糕的主意!
答案 1 :(得分:1)
尝试从代码中读取18位图。将位图放在res / drawable-hdpi文件夹中。 (针对不同的图像质量有不同的文件夹)。 在代码中设置位图字段:
Bitmap alpha;
Bitmap foo;
现在初始化onResume()中的位图:
Options options = new Options();
alpha = BitmapFactory.decodeResource(game.getResources(), R.drawable.youBitmapName, options);
foo = BitmapFactory.decodeResource(game.getResources(), R.drawable.youBitmapName2, options);
选项将使您能够进行缩减采样。 (我不确定你的图像有多大,但你可能还想使用缩放方法。)
在onPause中,通过调用以下方式清理资源:
alpha.recycle();
alpha = null;
foo.recycle();
foo = null;
一旦调用了onResume()方法,位图就会重新初始化。
答案 2 :(得分:0)
创建模拟器时,在硬件设置下增加“VM应用程序堆大小”和“ram”。这有望解决您的问题。