से बाहर निकलता है मैं एक गेमबुक एप्लिकेशन पर काम कर रहा हूं जो व्यूपेजर में 12 विचार दिखाता है।एंड्रॉइड सेटबैकग्राउंड रिसोर्स मेमोरी एक्सेप्टन
private class ImagePagerAdapter extends PagerAdapter {
private int[] mImages = new int[] { R.drawable.copertinai,
R.drawable.blui, R.drawable.azzurroi, R.drawable.rossoi,
R.drawable.gialloi, R.drawable.verdei, R.drawable.rosai,
R.drawable.grigioi, R.drawable.neroi, R.drawable.arancionei,
R.drawable.marronei, R.drawable.violai, R.drawable.ulm };
@Override
public int getCount() {
return mImages.length;
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == ((RelativeLayout) object);
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
Context context = MainActivity.this;
RelativeLayout relLayImageView = new RelativeLayout(context);
relLayImageView.setBackgroundResource(mImages[position]);
((ViewPager) container).addView(relLayImageView, new LayoutParams(
LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
return relLayImageView;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
((ViewPager) container).removeView((RelativeLayout) object);
object=null;
System.gc();
}
}
कुछ उपकरणों में यह स्मृति exceptionr के बाहर बेतरतीब ढंग से जब कोड की इस पंक्ति
relLayImageView.setBackgroundResource(mImages[position]);
लेकिन सभी उपकरणों मैं में कुछ इस तरह दिखाई में कहा जाता है कारण: यह मेरा कस्टम PagerAdapter है logcat जब मैं बारी पृष्ठों:
12-31 00:25:31.655: I/dalvikvm-heap(9767): Grow heap (frag case) to 50.875MB for 10384016-byte allocation
एप्लिकेशन भी एक ही समस्या के लिए कुछ उपकरणों में दुर्घटनाओं एक और गतिविधि में मैं अलग पृष्ठभूमि संसाधन सेट जब उपयोगकर्ता कार्रवाई के आधार पर मुख्य लेआउट में। यहाँ कोड:
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
colorButtons.get(indiceColoreAttuale).setBackgroundResource(
unSelectedColorsRes[indiceColoreAttuale]);
switch (index) {
case 0:
mainLayout.setBackgroundResource(R.drawable.blus);
break;
case 1:
mainLayout
.setBackgroundResource(R.drawable.azzurros);
break;
case 2:
mainLayout
.setBackgroundResource(R.drawable.rossos);
break;
case 3:
mainLayout
.setBackgroundResource(R.drawable.giallos);
break;
case 4:
mainLayout
.setBackgroundResource(R.drawable.verdes);
break;
case 5:
mainLayout
.setBackgroundResource(R.drawable.rosas);
break;
case 6:
mainLayout
.setBackgroundResource(R.drawable.grigios);
break;
case 7:
mainLayout
.setBackgroundResource(R.drawable.neros);
break;
case 8:
mainLayout
.setBackgroundResource(R.drawable.arancios);
break;
case 9:
mainLayout
.setBackgroundResource(R.drawable.marrones);
break;
case 10:
mainLayout
.setBackgroundResource(R.drawable.violas);
break;
}
mainLayout.startAnimation(animationShowTextColor);
mainLayout.setGravity(Gravity.CENTER_HORIZONTAL);
indiceColoreAttuale = index;
colorButtons.get(index).setBackgroundResource(
selectedColorsRes[index]);
}
});
यह excepiton फिर से चलाता है जब मैं setBackgroundResource() mainLayout पर कॉल करें।
मुझे उम्मीद है कि आप इसे हल करने में मेरी मदद कर सकते हैं, अग्रिम धन्यवाद!
लगता है जैसे आप कुछ _huge_ पृष्ठभूमि लोड कर रहे हैं और डिवाइस में उनके लिए पर्याप्त स्मृति नहीं है ... –
हाँ, लेकिन कभी-कभी बहुत सारी मेमोरी वाले उपकरणों पर होता है, और कम स्मृति वाले उपकरणों में नहीं होता .. I लोड छवियां जो वास्तव में बड़ी नहीं हैं (50 से 200 केबी तक)। – TheModularMind
वे _huge_ नहीं लगते हैं। पृष्ठभूमि संसाधन को बदलने से पहले आप बिटमैप्स को रीसायकल करने का प्रयास कर सकते हैं। पुरानी पृष्ठभूमि को आकर्षित करने के बाद और इसे बदलने के बाद देखें कि क्या यह 'बिटमैप ड्रायबल' है, यदि यह है तो उसे 'बिटमैप' पर 'रीसायकल()' पर कॉल करें। –