我有一个关于如何处理高分辨率图像的问题,因为放置它们会使应用程序变慢,我想知道是否有一种方法可以在不影响应用程序速度的情况下以可接受的分辨率工作。例如,一个图像库,当我滚动时,应用程序会变慢。提前致谢。
public class AdapterAlbum extends RecyclerView.Adapter<AdapterAlbum.ViewHolderClase> {
public class ViewHolderClase extends RecyclerView.ViewHolder {
ImageView imageView;
public ViewHolderClase(View itemView) {
super(itemView);
imageView = (ImageView) itemView.findViewById(R.id.cover);
}
}
@Override
public ViewHolderClase onCreateViewHolder(ViewGroup parent, int viewType) {
View viewItem = LayoutInflater.from(parent.getContext()).inflate(R.layout.album, null);
return new ViewHolderClase(viewItem);
}
@Override
public void onBindViewHolder(final ViewHolderClase holder, int position) {
holder.imageView.setBackgroundResource(Activity.imagenes.get(position));
}
@Override
public int getItemCount() {
return Activity.imagenes.size();
}
好吧,如果我加载图像的设计很简单,我应该指出我的图像大约为 43.4k,因为它们的分辨率更高
锻炼:
public class Actividad {
RecyclerView recyclerView;
RecyclerView.Adapter adapter;
RecyclerView.LayoutManager layoutManager;
static ArrayList<Integer> imagenes;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
imagenes = new ArrayList<>();
imagenes.addAll(Arrays.asList(R.drawable.cold22, R.drawable.cover3, R.drawable.coverr,
R.drawable.cover6, R.drawable.cold3, R.drawable.cover4, R.drawable.cover87, R.drawable.cover12));
contentView = inflater.inflate(R.layout.activ, null);
return contentView;
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public void onCreated(Bundle savedInstanceState) {
super.onCreated(savedInstanceState);
recyclerView = (RecyclerView) contentView.findViewById(R.id.reyclerViewTres);
layoutManager = new GridLayoutManager(getActivity(), 2);
recyclerView.setLayoutManager(layoutManager);
adapter = new AdapterAlbum();
recyclerView.setAdapter(adapter);
}
}
如何避免Android应用程序内存不足?
这是一个很好的问题,应用程序中的图像应该具有多大的大小才能不消耗大量内存并因此变慢?
实际上答案是它们必须具有可接受的分辨率,但在 kbs 中的权重很小(类似于网页中使用的图像),这主要是为了避免在应用程序中处理和操作图像中的内存和带宽消耗。可能是不必要的。
如何使您的图像变亮?好吧,您可以使用字节压缩。
这是一个教程:https ://sites.google.com/site/ticvalcarcel/optimizacion-de-imagenes-para-internet/tamano-y-peso-de-las-imagenes
Android SDK 有一种优化图像加载的方法,包括通过BitmapFactory类采用较小的图像格式:
http://developer.android.com/training/displaying-bitmaps/load-bitmap.html
考虑到图像先前优化的其他建议主要是使用两个库,
GLIDE和PICASSO,它们的实现很简单并且非常相似。
还有其他选择,但我认为做基准测试是最好的选择。
关于你的问题:
您必须确保将图像从内存中删除,
ImageView
以便他Garbage Collector
可以将其从内存中删除,只要它在屏幕上不再可见,因为如果它们正在累积,您可以在一段时间后获得 aJava.Lang.OutOfMemoryError
,您可以使用:任何一个
我建议您为这些任务使用 3 个著名的框架之一,并记住其中许多任务需要一定的权限。我的建议是图像的 Glide 和其他所有内容的 Volley。
将要使用时加载图像,不使用时将其删除,如果加载图像但不删除它们,您的应用程序将消耗越来越多的内存。另一方面,我建议您根据应用程序使用具有分辨率的图像,如果不可行,请调整它们的大小。
我使用该库
Glide
将图像加载到 a 中viewImage
,它负责为设备适当地调整它们的大小并将它们保存在缓存中以加速以后的过程。尝试查看您是否仍有性能问题。