android Viewpager在虚拟机上能运行,真机上不行

马凌翔 2016-09-01 09:17:46
这是一个viewpager切换动画程序,为什么在真机上显示错误
java.lang.OutOfMemoryError: Failed to allocate a 74649612 byte allocation with 16777184 free bytes and 39MB until OOM
但是在模拟器上运行时完全没有问题的
我的是红米NOTE3 高通骁龙650处理器
之前也是写了一个小的动画程序就是出现这个问题 但是在模拟器上没问题,这是为什么。
网上的很多教程都是压缩图片,但是我的这几个图片加起来才400多k,根本不存在内存过大的原因。求教

public class MainActivity extends AppCompatActivity {

private ViewPager viewPager;
private int [] res={R.drawable.guide_image1,R.drawable.guide_image2,R.drawable.guide_image3};
private List<ImageView> mlist;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
mlist=new ArrayList<ImageView>();
for (int i = 0; i <res.length ; i++) {

ImageView img=new ImageView(MainActivity.this);
Bitmap bitmap= BitmapFactory.decodeResource(getResources(),res[i]);
img.setImageBitmap(bitmap);
img.setScaleType(ImageView.ScaleType.CENTER_CROP);
mlist.add(img);
}
viewPager= (ViewPager) findViewById(R.id.viewpager);
viewPager.setAdapter(new PagerAdapter() {
@Override
public int getCount() {
return mlist.size();
}

@Override
public Object instantiateItem(ViewGroup container, int position) {
container.addView(mlist.get(position));

return mlist.get(position);
}

@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView(mlist.get(position));

}

@Override
public boolean isViewFromObject(View view, Object object) {
return view==object;
}
});
viewPager.setPageTransformer(true,new DepthPageTransformer());
}
}
...全文
322 6 打赏 收藏 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
马凌翔 2016-09-05
  • 打赏
  • 举报
回复
求教啊,到现在还弄不好
马凌翔 2016-09-03
  • 打赏
  • 举报
回复
有木有人呐~~~求教求教啊
马凌翔 2016-09-02
  • 打赏
  • 举报
回复
引用 1 楼 ZccShadow的回复:
一个很常见的问题,BitmapFactory.decodeResource这个方法加载图片很容易内存溢出,Failed to allocate a 74649612 byte allocation with 16777184 free bytes ,这句话说的很清楚了,你只有16777184bytes的空间却要加载74649612byte的东西。而且,内存溢出不只是和文件大小有关,真正影响内存的是bitmap而不是file的大小,所以你还是通过设置inSampleSize和颜色模式来避免这个问题吧。 http://blog.csdn.net/qq_25412055/article/details/52212530
后续我用同学的手机却可以正常运行,模拟器也可以正常运行。这是为什么呢?而且我之前用的不是bitmap,而是直接用文件设置的图片也是出现这种问题。
ink_s 2016-09-02
  • 打赏
  • 举报
回复
Out of Memory
moonFY 2016-09-02
  • 打赏
  • 举报
回复
楼上说的不错,报错信息说的 很清楚了, 不管多大的图片,使用时还是压缩一下再显示为好
一不小心_ 2016-09-01
  • 打赏
  • 举报
回复
一个很常见的问题,BitmapFactory.decodeResource这个方法加载图片很容易内存溢出,Failed to allocate a 74649612 byte allocation with 16777184 free bytes ,这句话说的很清楚了,你只有16777184bytes的空间却要加载74649612byte的东西。而且,内存溢出不只是和文件大小有关,真正影响内存的是bitmap而不是file的大小,所以你还是通过设置inSampleSize和颜色模式来避免这个问题吧。 http://blog.csdn.net/qq_25412055/article/details/52212530

80,490

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧