2014-09-25 66 views
0

我有一个ViewPager显示新闻条目的详细信息。你可以在30个条目之间来回滑动。这些条目中的每一个都是保存ImageView的View。该ImageView使用Picasso图像库从URL填充图像。Android的ViewPager与片段控股ImageView

它工作正常,但有时当我几乎经历了所有的各个项目(片段)我的应用程序突然崩溃,轻扫收到此错误:

Caused by: java.lang.OutOfMemoryError 
at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method) 
at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:594) 
at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:429) 
at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:840) 
at android.content.res.Resources.loadDrawable(Resources.java:2208) 
at android.content.res.TypedArray.getDrawable(TypedArray.java:602) 
at android.widget.ImageView.<init>(ImageView.java:129) 
at android.widget.ImageView.<init>(ImageView.java:119) 
at java.lang.reflect.Constructor.constructNative(Native Method) 
at java.lang.reflect.Constructor.newInstance(Constructor.java:423) 
at android.view.LayoutInflater.createView(LayoutInflater.java:594) 
at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56) 
at android.view.LayoutInflater.onCreateView(LayoutInflater.java:669) 
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:694) 
at android.view.LayoutInflater.rInflate(LayoutInflater.java:755) 
at android.view.LayoutInflater.rInflate(LayoutInflater.java:758) 
at android.view.LayoutInflater.rInflate(LayoutInflater.java:758) 
at android.view.LayoutInflater.rInflate(LayoutInflater.java:758) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:492) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:397) 
at com.app.mobil.fragment.placeholder.FanpicPlaceholderFragment.onCreateView(FanpicPlaceholderFragment.java:92) 
at android.support.v4.app.Fragment.performCreateView(Fragment.java:1504) 
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:942) 
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1121) 
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682) 
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1484) 
at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:482) 
at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141) 
at android.support.v4.view.ViewPager.populate(ViewPager.java:1073) 
at android.support.v4.view.ViewPager.populate(ViewPager.java:919) 
at android.support.v4.view.ViewPager$3.run(ViewPager.java:249) 
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761) 
at android.view.Choreographer.doCallbacks(Choreographer.java:574) 
at android.view.Choreographer.doFrame(Choreographer.java:543) 
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747) 
at android.os.Handler.handleCallback(Handler.java:733) 
at android.os.Handler.dispatchMessage(Handler.java:95) 
at android.os.Looper.loop(Looper.java:136) 
at android.app.ActivityThread.main(ActivityThread.java:5139) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:515) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:796) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:612) 
at dalvik.system.NativeStart.main(Native Method) 

而且刷卡时我有时会收到下面的logcat消息(当当前视图中包含加载到ImageView的大图像):

09-25 13:19:59.816 31859-32208/com.app.mobile E/dalvikvm-heap﹕ Out of memory on a 3276816-byte allocation. 

我对整个事情的一个问题:我与毕加索装入ImageViews的图像有时是相当大的(〜每幅图像3MB)。

有人可以向我解释我做错了什么吗?

+0

你使用什么样的适配器为你的ViewPager? – tasomaniac 2014-09-25 11:28:33

+0

试试这个http://stackoverflow.com/questions/22256097/out-of-memory-error-when-using-animationdrawable/22256342#22256342 – 2014-09-25 11:31:01

+0

请改变使用图像加载器库可能是影响somting – 2014-09-25 11:32:36

回答

1

试试这个:

android:largeHeap="true" 

在你的清单,在应用程序标签

+0

感谢您提供最简单的解决方案对我的问题。 – Klaus 2014-09-25 12:06:15

0

变换图像转换为布局使用,以减少内存大小下面的代码 -

Picasso.with(上下文).load (url).resize(width,height).into(imageView)

确保您使用的是毕加索的libr ary with version - 2.3.4

+0

我从2.3.2升级到2.3.4。还是一样的错误。这就是我如何加载我的图片: 毕加索 \t。随着(上下文) \t .load(URL) \t .resize(1024,800) \t .centerCrop() \t .into(fanpicImageView); – Klaus 2014-09-25 12:01:11

+0

尝试缩小图像的宽度和高度。例如width = 100和height = 50。 (1024,800)似乎非常高,并且会消耗更多的内存,从而导致内存不足错误。按照您的要求尝试一些最小值。 – 2014-09-25 12:18:51