我正在开发一个项目,该项目使用一系列图片网址并将其加载到recyclerview网格中。图像可以是任何分辨率,应用程序在加载6张图像后崩溃。我认为使用毕加索会解决问题,但这不起作用。该应用程序现在速度较慢,并且recyclelerview滚动是滞后的,而在崩溃之前它最多只加载3-4个图像。
内存泄漏:
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder>{
LayoutInflater inflater;
public RecyclerViewAdapter(Context c){
inflater=LayoutInflater.from(c);
}
@NonNull
@Override
public RecyclerViewAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View itemView = inflater.inflate(R.layout.recyclerview_item,parent,false);
itemView.setMinimumHeight(150);
return new ViewHolder(itemView);
}
@Override
public void onBindViewHolder(@NonNull RecyclerViewAdapter.ViewHolder holder, int position) {
if(urls!=null){
//Uri uri = Uri.parse(urls.get(position));
//Toast.makeText(getContext(),""+urls.get(position),Toast.LENGTH_SHORT).show();
Picasso.with(context)
.load(urls.get(position))
.into(holder.view);
}
}
@Override
public int getItemCount() {
if(urls != null)
return urls.size();
else
return 0;
}
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
ImageView view;
public ViewHolder(View itemView) {
super(itemView);
view=itemView.findViewById(R.id.image_recycler);
}
@Override
public void onClick(View v) {
}
}
}
答案 0 :(得分:0)
试试Glide库。它非常有效: https://github.com/bumptech/glide
答案 1 :(得分:0)
这是来自毕加索的官方网站,它会缩小图像尺寸。如果这样可行则问题是图像尺寸太大
您还可以为更高级的效果指定自定义转换。
public class CropSquareTransformation implements Transformation {
@Override public Bitmap transform(Bitmap source) {
int size = Math.min(source.getWidth(), source.getHeight());
int x = (source.getWidth() - size) / 2;
int y = (source.getHeight() - size) / 2;
Bitmap result = Bitmap.createBitmap(source, x, y, size, size);
if (result != source) {
source.recycle();
}
return result;
}
@Override public String key() { return "square()"; }
}
将此类的实例传递给
transform
方法。
答案 2 :(得分:0)
<application
android:allowBackup="true"
android:icon="@drawable/app_icon"
android:label="@string/app_name"
android:supportsRtl="true"
android:largeHeap="true"
android:theme="@style/AppTheme"/>
在清单文件中使用largeHeap =“true”。