I have a list of 70 text elements with image icons (which are stored in a folder with selected features). If I launch the application for the first time and scroll through the list slowly, an exception does not occur.
When the application launches for the first time, and I view the list using the fling action, the following exception is thrown:
java.lang.OutOfMemoryError: bitmap size exceeds VM budget
at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:439)
at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:322)
at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:688)
at android.content.res.Resources.loadDrawable(Resources.java:1710)
at android.content.res.Resources.getDrawable(Resources.java:585)
After that, if I kill the application using DDMS, run it again and scroll through it with the “fling” action, an exception will not occur. Thus, an exception occurs only if the application is installed and launched for the first time.
Here is the adapter I use for the list:
public class AuthorAdapter extends ArrayAdapter<Author> {
private ArrayList<Author> items;
private Context context;
private LayoutInflater inflater;
public AuthorAdapter(Context context, int textViewResourceId, ArrayList<Author> items) {
super(context, textViewResourceId, items);
this.items = items;
this.context = context;
inflater = LayoutInflater.from(this.context);
}
static class ViewHolder {
ImageView authorFace;
TextView authorName;
TextView authorWho;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = inflater.inflate(R.layout.autor_data, null);
holder = new ViewHolder();
holder.authorFace = (ImageView) convertView.findViewById(R.id.authorFaceImageView);
holder.authorName = (TextView) convertView.findViewById(R.id.authorNameTextView);
holder.authorWho = (TextView) convertView.findViewById(R.id.authorWhoTextView);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
Author author = items.get(position);
if (author != null) {
if (holder.authorFace != null) {
String faceFileName = author.getFace();
String facePlaceName = context.getPackageName() + ":drawable/" + faceFileName.subSequence(0, faceFileName.lastIndexOf("."));
int faceFileId = context.getResources().getIdentifier(facePlaceName, null, null);
holder.authorFace.setImageResource(faceFileId);
}
if (holder.authorName != null) {
holder.authorName.setText(author.getName());
}
if (holder.authorWho != null) {
holder.authorWho.setText(author.getWho());
}
}
return convertView;
}
}
?
- ?
, ?
.