使用ViewPager时的OOM问题解决
2016-08-22 23:07
288 查看
最近在写项目过程中遇到这样一个问题。一个用viewPager制作的APP启动引导页,其内容只有一个imageView,而且每个imageView的平均为100K左右,该项目在720P手机上运行完全正常。但是在换到1080P手机上运行的时候却给博主抛出了结结实实的一记OOM,顿时让我懵逼不已,问题被锁定在了imageview的setbackgroundresourse()方法中。viewpager中,我用for循环依次创建了4个imageview对象并且依次添加到viewpager所对应的list集合中。如代码中被注释的语句。后为解决该问题,改为在for循环中只是单纯实例化四个imageview对象而原来的setbackgroundresourse()操作被放在了viewpager的
public Object instantiateItem(ViewGroup container, int position) {
imageViews.get(position).setImageResource(imageId[position]);
container.addView(imageViews.get(position));
return imageViews.get(position);
}
中进行。如此之后OOM即可解决。
全部代码如下
public Object instantiateItem(ViewGroup container, int position) {
imageViews.get(position).setImageResource(imageId[position]);
container.addView(imageViews.get(position));
return imageViews.get(position);
}
中进行。如此之后OOM即可解决。
全部代码如下
package com.example.xiaom.activities; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.util.Log; import android.view.View; import android.view.ViewGroup; import android.view.ViewTreeObserver; import android.widget.Button; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.RelativeLayout; import com.example.xiaom.myplugins.TitleLayout; import com.example.xiaom.utils.FirstLaunchSharePerenferens; import java.util.ArrayList; public class user_first_guide extends Activity { private static final int []imageId={R.drawable.guide_1, R.drawable.guide_2, R.drawable.guide_3, R.drawable.guide_4}; private ViewPager viewPager; private ArrayList<ImageView> imageViews; private Button btn_start; private LinearLayout linearLayout; private View point_white; private int wid; private RelativeLayout relativeLayout1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_user_first_guide); InitView(); setAdapter(); setListener(); } private void setListener() { viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { RelativeLayout.LayoutParams relativeLayout = (RelativeLayout.LayoutParams) point_white.getLayoutParams(); relativeLayout.leftMargin = (int)(position * wid + wid * positionOffset); relativeLayout1 = (RelativeLayout) findViewById(R.id.rl_points); point_white.setLayoutParams(relativeLayout); } @Override public void onPageSelected(int position) { if (position == imageId.length - 1){ btn_start.setVisibility(View.VISIBLE); }else { btn_start.setVisibility(View.INVISIBLE); } } @Override public void onPageScrollStateChanged(int state) { } }); btn_start.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(user_first_guide.this, MainActivity.class); startActivity(intent); FirstLaunchSharePerenferens.isFirstLaunch(user_first_guide.this,false); finish(); } }); } private void setAdapter() { MyViewPagerAdapter myViewPagerAdapter = new MyViewPagerAdapter(); viewPager.setAdapter(myViewPagerAdapter); } private void InitView() { imageViews = new ArrayList<>(); viewPager = (ViewPager) findViewById(R.id.vp_guide); point_white = findViewById(R.id.guide_point_white); btn_start = (Button) findViewById(R.id.btn_start); linearLayout = (LinearLayout) findViewById(R.id.ll_guide_point); for (int i = 0; i < imageId.length; i ++){ ImageView imageView = new ImageView(this); // imageView.setBackgroundResource(imageId[i]); imageViews.add(imageView); } for (int i = 0; i < imageId.length; i ++){ View view = new View(this); view.setBackgroundResource(R.drawable.guide_line_blue); LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(10,10); view.setLayoutParams(layoutParams); if (i > 0){ layoutParams.leftMargin = 10; } linearLayout.addView(view); } linearLayout.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { linearLayout.getViewTreeObserver().removeOnGlobalLayoutListener(this); wid = linearLayout.getChildAt(1).getLeft() - linearLayout.getChildAt(0).getLeft(); Log.d("width", wid +""); } }); } class MyViewPagerAdapter extends PagerAdapter { @Override public int getCount() { return imageViews.size(); } @Override public boolean isViewFromObject(View view, Object object) { return view==object; } @Override public Object instantiateItem(ViewGroup container, int position) { imageViews.get(position).setImageResource(imageId[position]); container.addView(imageViews.get(position)); return imageViews.get(position); } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View)object); } } }
相关文章推荐
- 有关ViewPager的使用及解决Android下ViewPager和PagerAdapter中调用notifyDataSetChanged失效的问题
- 安卓中的fragment与viewPager的使用问题的解决
- ScrollView viewPager ListView 结合使用的问题及解决办法
- 解决viewpager+glide查看大图OOM的问题
- Android中使用ViewPager制作广告栏效果 - 解决ViewPager占满全屏页面适配问题
- 使用ViewPager时,发生内存溢出OOM问题
- Android使用ViewPager实现滚动广告解决OOM小技巧
- recycleview+NestedScrollView+viewpager 解决滑动问题以及recycleview的使用技巧
- Android开发ViewPager的预加载和Fragment的销毁问题,以及tabLayout+ViewPager的使用,tablayout平板适配问题解决
- 【Android 应用开发】Android中使用ViewPager制作广告栏效果 - 解决ViewPager占满全屏页面适配问题
- 【Android 应用开发】Android中使用ViewPager制作广告栏效果 - 解决ViewPager占满全屏页面适配问题
- android 布局 使用 viewPager 时,如何解决 和 子页面 长按滑动 冲突问题
- 完美解决viewpager跟其他类型的listview 或 gridview一起使用时,滑动冲突问题
- Android中使用ViewPager制作广告栏效果 - 解决ViewPager占满全屏页面适配问题
- 解决在viewpager中使用scrollerView导致的焦点的问题
- 解决Fragment中使用ViewPager时,ViewPager里的Fragment错位和空白问题
- 解决Fragment中使用ViewPager时,ViewPager里的Fragment错位和空白问题
- 解决viewpager加载本地1000多张图片oom问题
- 如何解决Viewpager配合Fragment使用时相邻Fragment出现相同OptionMenu的问题?
- android中通过添加view使用ViewPager出现的问题及解决方法