android 解决ViewPager加载大量图片内存溢出问题_Android

1.大家都知道为ViewPager构建适配器继承PagerAdapter,怎么构建就不说了。Viewpager会默认加载当前页和当前页的左右两页。一开始当前页是下标0,所以一开始默认加载第0页(指下标,下同)和第1页。当你向右滑动,当前页为第1页时,ViewPager会加载第2页,这时一共有3页存在(第0,1,2页)。再向右滑动,当前页为第2页时,会移除第0页,加载第3页,同理向左滑动当前页为第1页时,会移除第3页。这么说应该懂了吧。

知道了上面的原理,就可以让ViewPager始终只加载3页的图片。加载是执行instantiateItem(...)方法,移除是执行destroyItem(...)方法,可以在instantiateItem(...)里加载某一页的图片,在destroyItem(...)里回收某一页的图片。附上代码:

2.代码实例:

package com.example.test;

import java.util.ArrayList;

import android.app.Activity;
import android.os.Bundle;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.View;
import android.widget.ImageView;

public class TestActivity extends Activity{

 private ViewPager mPager;
 private ArrayList<View> views;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 views=new ArrayList<View>();
 views.add(new ImageView(this));
 views.add(new ImageView(this));
 views.add(new ImageView(this));
 views.add(new ImageView(this));
 views.add(new ImageView(this));
 views.add(new ImageView(this));
 views.add(new ImageView(this));
 views.add(new ImageView(this));

 mPager=new ViewPager(this);
 mPager.setAdapter(new MyPagerAdapter());
 setContentView(mPager);
 }

 class MyPagerAdapter extends PagerAdapter{

 @Override
 public void destroyItem(View container, int position, Object object) {
  //在此次回收图片
  //........回收代码

  //移除页面
  ((ViewPager)container).removeView(views.get(position));
 }

 @Override
 public Object instantiateItem(View container, int position) {
  // 在此次加载图片
  //......加载图片代码

  //加载页面
  ((ViewPager)container).addView(views.get(position), 0);
  return views.get(position);
 }

 @Override
 public int getCount() {
  // TODO Auto-generated method stub
  return views.size();
 }

 @Override
 public boolean isViewFromObject(View arg0, Object arg1) {
  // TODO Auto-generated method stub
  return false;
 }

 }
}

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索android
, 内存溢出
, viewpager
, 的viewpager
开发viewpager
viewpager内存溢出、viewpager禁止预加载、viewpager取消预加载、viewpager预加载、viewpager懒加载,以便于您获取更多的相关知识。

时间: 2024-08-13 10:11:15

android 解决ViewPager加载大量图片内存溢出问题_Android的相关文章

android 解决ViewPager加载大量图片内存溢出问题

1.大家都知道为ViewPager构建适配器继承PagerAdapter,怎么构建就不说了.Viewpager会默认加载当前页和当前页的左右两页.一开始当前页是下标0,所以一开始默认加载第0页(指下标,下同)和第1页.当你向右滑动,当前页为第1页时,ViewPager会加载第2页,这时一共有3页存在(第0,1,2页).再向右滑动,当前页为第2页时,会移除第0页,加载第3页,同理向左滑动当前页为第1页时,会移除第3页.这么说应该懂了吧. 知道了上面的原理,就可以让ViewPager始终只加载3页的

[IOS]来回加载大量图片内存溢出的问题

用xcode的instrument工具查看内存使用情况时,发现程序使用内存情况很稳定维持在1.3M左右,也没有内存泄漏.那么问题来了,程序无故退出肯定是内存溢出了,而instrument并显示没有溢出(一般单个程序内存消耗唯20M左右会发警告,30M程序崩溃退出).所以一直在想是不是哪个地方忘记释放内存了,经过仔细检查,并不存在没有释放的内存啊,纠结了一天.最后终于找到问题所在了,是[UIImage imageNamed@""]在搞鬼:       翻看了一些网上资料http://ww

WPF 加载大量图片内存溢出

问题描述 小弟在用WPF做一个项目,但是图片素材过多,而且素材大小不可以改变,图片素材一共有接近4G,加载的时候总是出现使用一会新图片就没法继续显示了(报了没有足够内存),请问各位前辈,是否有什么办法可以动态加载图片资源呢?先在的做法是直接BitmapImage(newUri(path))的方法创建一个BitmapImage,然后直接调用这个BitmapImage,发现这么调用,使用过的图片资源是没法及时释放掉的,请问有什么方法能及时释放图片资源,或者可以实现动态加载图片资源呢?感激不尽 解决方

bitmap-ViewPager加载图片内存溢出怎么解决?

问题描述 ViewPager加载图片内存溢出怎么解决? @Override public Object instantiateItem(View view int position) { View mv = mListViews.get(position); ((ViewPager) view).addView(mv 0); // 加载图片 ImageView iv = (ImageView) mv.findViewById(R.id.imageView); try {//图片的名称 Strin

Android加载图片内存溢出问题解决方法

  这篇文章主要介绍了Android加载图片内存溢出问题解决方法,本文讲解使用BitmapFactory.Options解决内存溢出问题,需要的朋友可以参考下 1. 在Android软件开发过程中,图片处理是经常遇到的. 在将图片转换成Bitmap的时候,由于图片的大小不一样,当遇到很大的图片的时候会出现超出内存的问题,为了解决这个问题Android API提供了BitmapFactory.Options这个类. 2. 由于Android对图片使用内存有限制,若是加载几兆的大图片便内存溢出.Bi

Android加载图片内存溢出问题解决方法_Android

1. 在Android软件开发过程中,图片处理是经常遇到的. 在将图片转换成Bitmap的时候,由于图片的大小不一样,当遇到很大的图片的时候会出现超出内存的问题,为了解决这个问题Android API提供了BitmapFactory.Options这个类. 2. 由于Android对图片使用内存有限制,若是加载几兆的大图片便内存溢出.Bitmap会将图片的所有像素(即长x宽)加载到内存中,如果图片分辨率过大,会直接导致内存OOM,只有在BitmapFactory加载图片时使用BitmapFact

Android ListView异步加载图片方法详解_Android

本文实例讲述了Android ListView异步加载图片方法.分享给大家供大家参考,具体如下: 先说说这篇文章的优点把,开启线程异步加载图片,然后刷新UI显示图片,而且通过弱引用缓存网络加载的图片,节省了再次连接网络的开销. 这样做无疑是非常可取的方法,但是加载图片时仍然会感觉到轻微的卡屏现象,特别是listview里的item在进行快速滑动的时候. 我找了一下原因,可能是在listview快速滑动屏幕的时候划过的item太多 而且每次调用getView方法后就会异步的在过去某个时间内用han

Android编程实现加载等待ProgressDialog的方法_Android

本文实例讲述了Android编程实现加载等待ProgressDialog的方法.分享给大家供大家参考,具体如下: 显示progressDialog的类: import android.app.ProgressDialog; import android.content.Context; import android.content.DialogInterface; import android.content.DialogInterface.OnCancelListener; public cl

Android使用ViewPager加载图片和轮播视频

作为Android基础组件之一,大家对viewpager已经很熟悉了,网上也有很多使用viewpager来加载图片的案例.但是像微信那样点击图片,可以轮播显示图片和视频的例子却没找到.正巧项目中有需求,可以就花时间写了下,现在给一下核心代码,希望对有此需求的同学们起一个抛砖引玉的作用.话不多说了,上代码: 以下是initData的代码 public void initData() { //把聊天界面的图片和视频找出来,并加到数组中,并在 //并根据传进来的position来找到视频或图片在数组中