使用ViewPager时的OOM问题解决
来源:互联网 发布:潜艇模型 淘宝 编辑:程序博客网 时间:2024/06/09 17:53
最近在写项目过程中遇到这样一个问题。一个用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即可解决。
全部代码如下
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); } }}
0 0
- 使用ViewPager时的OOM问题解决
- Bitmap的OOM问题解决
- 使用ViewPager时,发生内存溢出OOM问题
- 关于android程序中使用bitmap放大功能时的OOM问题解决方法
- 使用Glide导致内存泄漏最终OOM的问题解决
- Android加载图片时出现OOM(OutOfMermary)的问题解决方案
- 解决viewpager嵌套下的oom
- Android处理图片报OOM的问题解决
- Android处理图片报OOM的问题解决
- Android使用ViewPager实现滚动广告解决OOM小技巧
- HorizontalScrollView中嵌套ViewPager时,ViewPager无法滑动的问题解决方法
- ViewPager使用FragmentPagerAdapter卡顿问题解决
- 解决viewpager+glide查看大图OOM的问题
- ViewPager中ViewPager的使用
- MapPartition一次oom问题解决
- 记一次线上Groovy导致的OOM的问题解决过程
- 关于android gridview 加载大量图片的OOM问题解决方案
- ViewPager加载多图时避免OOM
- [置顶] Android之Notification使用大全
- C++链表对象类的总结0818
- 句子截图
- Redis-3.2.1主从故障测试实例 及出现sdown后没有出现try-failover 或者出现 failover-abort-not-elected 解决方法
- 配置lua环境之windows sublime Text3
- 使用ViewPager时的OOM问题解决
- windows 环境下安装 memcached
- iOS 中碰到tableview组合下拉刷新崩溃
- 自定义控件-CascadeLayout
- LeetCode: First Missing Positive
- mac的centos虚拟机(PD) 中如何找到mac主机的目录和文件?
- 今日随笔
- 闭包再学习
- PHP结合Linux的cron命令实现定时任务