Я знаю, что многие вопросы относительно этого уже отправлены в переполнение стека. Фактически я прошел через это и реализовал некоторые методы. Но все равно не повезло, он все еще показывает ту же ошибку, что и предыдущая .Это мой код.java.lang.OutOfMemoryError в Amazon Kindle Fire
public class ViewPagerAdapter extends PagerAdapter {
Activity activity;
int imageArray[];
LayoutInflater inflater;
Typeface tf;
ImageView imageView;
ArrayList<Bitmap> list=new ArrayList<Bitmap>();;
Bitmap bitmap;
public ViewPagerAdapter(Activity act, int[] imgArra) {
imageArray = imgArra;
activity = act;
inflater = (LayoutInflater) act
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
tf = Typeface.createFromAsset(activity.getAssets(), "Times Roman.ttf");
}
public int getCount() {
return imageArray.length;
}
public Object instantiateItem(View collection, int position) {
// System.out.println("instantiate.... " + position);
// ImageView view = new ImageView(activity);
// view.setBackgroundColor(Color.parseColor("#909090"));
// view.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
// LayoutParams.FILL_PARENT));
// view.setImageResource(imageArray[position]);
// ((ViewPager) collection).addView(view, 0);
// return view;
try {
View view;
view = inflater.inflate(R.layout.item_starting_screen, null);
TextView textView = (TextView) view
.findViewById(R.id.txt_heading_starting_screen);
textView.setText(activity.getResources().getStringArray(
R.array.txt_starting_screen)[position]);
textView.setTypeface(tf, Typeface.BOLD_ITALIC);
imageView=(ImageView) view.findViewById(R.id.img_starting_screen);
imageView.setImageBitmap(BitmapFactory.decodeResource(activity.getResources(), imageArray[position]));
bitmap=((BitmapDrawable)imageView.getDrawable()).getBitmap();
list.add(bitmap);
((ViewPager) collection).addView(view, 0);
return view;
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
return null;
}
}
@Override
public void destroyItem(View arg0, int arg1, Object arg2) {
((ViewPager) arg0).removeView((View) arg2);
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0 == ((View) arg1);
}
@Override
public Parcelable saveState() {
return null;
}
public void clearbitmap(int flag)
{
if(flag==1)
{
for(int i=0;i<list.size();i++)
{
bitmap=list.get(i);
bitmap.recycle();
}
}
}
}
И после многого поиска я придумал метод утилизации, но все же он не работает. Когда я запускаю свое приложение в первый раз, нет проблем. Во второй раз он сбой.
У меня есть 5 страниц, как ввод для приложения, и когда пользователь закончил с запуском приложения. Когда он запускается, я устанавливаю флаг и вызываю метод clearbitmap и использую метод recycle для очистки растрового изображения.
Я уже уменьшил размер своих изображений, но все еще не работал. Но когда я использую изображения с низким разрешением, это работает. Но я не хочу этого. Я использую Amazon Kindle Fire как мое тестовое устройство. И эта проблема только с этим устройством. На остальных устройствах он работает нормально.
я по ссылке, данное rajahsekar и я изменил код, как это до сих пор его врезаться
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeResource(activity.getResources(), imageArray[position], options);
int imageHeight = options.outHeight;
int imageWidth = options.outWidth;
imageView.setImageBitmap(decodeSampledBitmapFromResource(activity.getResources(),imageArray[ position],imageWidth,imageHeight));
И вычислили растровое С помощью этих методов
public static int calculateInSampleSize(
BitmapFactory.Options options, int reqWidth, int reqHeight) {
// Raw height and width of image
final int height = options.outHeight;
final int width = options.outWidth;
int inSampleSize = 1;
if (height > reqHeight || width > reqWidth) {
final int halfHeight = height/2;
final int halfWidth = width/2;
// Calculate the largest inSampleSize value that is a power of 2 and keeps both
// height and width larger than the requested height and width.
while ((halfHeight/inSampleSize) > reqHeight
&& (halfWidth/inSampleSize) > reqWidth) {
inSampleSize *= 2;
}
}
return inSampleSize;
}
public static Bitmap decodeSampledBitmapFromResource(Resources res, int resId,
int reqWidth, int reqHeight) {
// First decode with inJustDecodeBounds=true to check dimensions
final BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeResource(res, resId, options);
// Calculate inSampleSize
options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);
// Decode bitmap with inSampleSize set
options.inJustDecodeBounds = false;
return BitmapFactory.decodeResource(res, resId, options);
}
Но все-таки не повезло.
Nope все еще не работает. –
Я принимаю это как ответ. Не полностью решил мою проблему, однако, когда я изменил изображениеView.setImageBitmap (decodeSampledBitmapFromResource (activity.getResources(), imageArray [position], 200,200)); как это, он начинает работать. Спасибо за эту ссылку .. –
Удалите код на вашем языке и проверьте его один раз. – rajahsekar