کرش در پروژه اسلایدر تصویر
سلام دوستان. پروژه اسلایدر را در یک پروژه دیگه اضافه کردم و آن را در داخل یک صفحه دیگه قرار داده ولی متاسفانه در حال کار روی امولاتور کرش می کنه و خطای زیر را می دهد و روی گوشی هم صفحه بسته وی شه و به صفحه قبل بر می گردد. با توجه به اینکه حجم عکس ها کم است نمی دونم مشکل از کجاست.
java.lang.OutOfMemoryError: bitmap size exceeds VM budget
کدها دقیقا مشابه کدهای آموزش است و به جز خود عکس ها که از عکس های ویدئو فوق العاده کوچکتر و کم حجم ترند فرقی بین این دو نیست. بخش های مربوط به دایره و ... هم در پروژه استفاده نشدند و صرفا خود عکس ها هست.
چیزی که مشخصه این خطا به هر حال از حافظه هست و باید احتمالا سایر اکتیویتی های قبلی را ببندم و فقط این اکتیویتی باز باشه تا حافظه بیشتری در دسترس باشه.
1- در خود این بخش راهی وجود داره که رم کمتری اشغال بشه؟ (مثلا استفاده از ترد ها یا ...)
2- چطوری می توان این خطا را پوشش داد به صورتی که منجر به کرش برنامه نشه و فقط از ورق خوردن تصویر جلوگیری کنه و یا برنامه به موقعیت خاصی هدایت بشه.
با تشکر
این هم کدها که خواسته شده بود. (در پاسخ جداگانه آورده شد تا اصل سوال حجیم به نظر نرسد.)
public class PicAdapter extends PagerAdapter {
public ArrayList PicNumber;
public ArrayList imageTitles;
public PicAdapter(ArrayList PicNumber, ArrayList imageTitles) {
this.PicNumber = PicNumber;
this.imageTitles = imageTitles;
}
@Override
public int getCount() {
return PicNumber.size();
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view.equals(object);
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
View view = G.layoutInflater.inflate(R.layout.pager_item, null);
ImageView image = (ImageView) view.findViewById(R.id.image);
TextView text = (TextView) view.findViewById(R.id.text);
image.setImageResource(PicNumber.get(position));
text.setText(imageTitles.get(position));
container.addView(view);
return view;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
}
و این هم کدهای اکتیویتی:
//final PageIndicator indicator = (PageIndicator) findViewById(R.id.indicator);
ArrayList PicNumber = new ArrayList();
ArrayList imageTitles = new ArrayList();
for (int i = 0; i < 15; i++) {
int id = G.context.getResources().getIdentifier("image" + i, "drawable",
G.context.getPackageName());
PicNumber.add(id);
imageTitles.add("Nice Nature #" + i);
}
// indicator.setIndicatorsCount(14);
ViewPager pager = (ViewPager) findViewById(R.id.pagerViewer);
pager.setOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageSelected(int index) {}
@Override
public void onPageScrolled(int startIndex, float percent, int pixel) {
// indicator.setPercent(percent);
Log.i("LOG", "Percent: " + startIndex + ", " + percent);
// indicator.setCurrentPage(startIndex);
}
@Override
public void onPageScrollStateChanged(int arg0) {
}
});
PicAdapter adapter = new PicAdapter(PicNumber, imageTitles);
pager.setAdapter(adapter);
}
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .