0
我正在开发一个应用程序,使用staggered gridview我有严重的性能问题,因为加载后只有6,7项滚动是非常laggy和我得到的一半时间:OutOfMemoryError在“机器人.graphics.BitmapFactory.nativeDecodeStream(本机方法)”用尽交错gridview布局
这是我的适配器(我用的支架模式):
package ngapps.socialbackground;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
import ngapps.socialbackground.Util.ImageDownloaderTask;
/**
* Created by Naor on 02/09/2014.
*/
public class ItemAdapter extends BaseAdapter {
ArrayList<ImageItem> imageItemArrayList = new ArrayList<ImageItem>();
Context context;
static class ViewHolder {
public TextView textView;
public ImageView imageView;
ViewHolder(View base) {
textView = (TextView) base.findViewById(R.id.textView);
imageView = (ImageView) base.findViewById(R.id.imageView);
}
}
public ItemAdapter(Context context){
this.context = context;
}
@Override
public int getCount() {
return imageItemArrayList.size();
}
@Override
public Object getItem(int position) {
return imageItemArrayList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
public void addItem(ImageItem imageItem){
imageItemArrayList.add(imageItem);
notifyDataSetChanged();
}
public void addItems(List<ImageItem> items) {
imageItemArrayList.addAll(items);
notifyDataSetChanged();
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
ViewHolder holder;
if (convertView == null){
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = inflater.inflate(R.layout.item_layout,null);
holder = new ViewHolder(v);
v.setTag(holder);
} else {
holder = (ViewHolder) v.getTag();
}
ImageItem curImageItem = imageItemArrayList.get(position);
holder.textView.setText(curImageItem.getText());
if (curImageItem.getPreviewBitmap() != null)
holder.imageView.setImageBitmap(curImageItem.getPreviewBitmap());
else
new ImageDownloaderTask(holder.imageView, curImageItem).execute(curImageItem.getImageURL());
return v;
}
}
,这是ImageDownloaderTask:
package ngapps.socialbackground.Util;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.util.Log;
import android.widget.ImageView;
import java.io.InputStream;
import ngapps.socialbackground.ImageItem;
/**
* Created by Naor on 04/09/2014.
*/
public class ImageDownloaderTask extends AsyncTask<String, Void, Bitmap> {
ImageView bmImage;
ImageItem imageItem;
public ImageDownloaderTask(ImageView bmImage, ImageItem imageItem) {
this.bmImage = bmImage;
this.imageItem = imageItem;
}
protected Bitmap doInBackground(String... urls) {
String url = urls[0];
Bitmap mIcon = null;
try {
InputStream in = new java.net.URL(url).openStream();
mIcon = BitmapFactory.decodeStream(in);
} catch (Exception e) {
Log.e("Error", e.getMessage());
}
return mIcon;
}
protected void onPostExecute(Bitmap result) {
bmImage.setImageBitmap(result);
imageItem.setPreviewBitmap(result);
}
}
个
的图像是约160个像素宽, 我已验证持有人模式工作的,我只是创建视图的量有限,没有新的ImageDownloaderTask图像下载完毕
后创建,仍然之后落后一切都已完成加载时滚动
什么是伤害我的表现?