Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/225.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android滑动图像应用程序内存不足错误_Android_Android Viewpager_Swipe - Fatal编程技术网

Android滑动图像应用程序内存不足错误

Android滑动图像应用程序内存不足错误,android,android-viewpager,swipe,Android,Android Viewpager,Swipe,我正在开发一个简单的android应用程序,它有一个带有滑动图像的ViewPager。我有一个包含12个图像的静态应用程序。当我刷卡时,应用程序在第四张图片后崩溃 如何理解stacktrace并解决此问题 java.lang.OutOfMemoryError 05-2421:37:25.718:E/AndroidRuntime(551): 在android.graphics.BitmapFactory.NativeDecodeset(本机方法) 05-2421:37:25.718:E/Andro

我正在开发一个简单的android应用程序,它有一个带有滑动图像的
ViewPager
。我有一个包含12个图像的静态应用程序。当我刷卡时,应用程序在第四张图片后崩溃

如何理解stacktrace并解决此问题

java.lang.OutOfMemoryError 05-2421:37:25.718:E/AndroidRuntime(551): 在android.graphics.BitmapFactory.NativeDecodeset(本机方法) 05-2421:37:25.718:E/AndroidRuntime(551):在 android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:483) 05-2421:37:25.718:E/AndroidRuntime(551):在 decodeResourceStream(BitmapFactory.java:351) 05-2421:37:25.718:E/AndroidRuntime(551):在 android.graphics.drawable.drawable.createFromResourceStream(drawable.java:773) 05-2421:37:25.718:E/AndroidRuntime(551):在 android.content.res.Resources.loadDrawable(Resources.java:1935)05-24 21:37:25.718:E/AndroidRuntime(551):在 android.content.res.Resources.getDrawable(Resources.java:664)05-24 21:37:25.718:E/AndroidRuntime(551):在 android.widget.ImageView.resolveUri(ImageView.java:542)05-24 21:37:25.718:E/AndroidRuntime(551):在 android.widget.ImageView.setImageResource(ImageView.java:315)05-24 21:37:25.718:E/AndroidRuntime(551):在 com.sqisland.android.swipe\u image\u viewer.MainActivity$ImagePagerAdapter.instanceItem(MainActivity.java:72) 05-2421:37:25.718:E/AndroidRuntime(551):在 android.support.v4.view.ViewPager.addNewItem(ViewPager.java:692)05-24 21:37:25.718:E/AndroidRuntime(551):在 android.support.v4.view.ViewPager.populate(ViewPager.java:875)05-24 21:37:25.718:E/AndroidRuntime(551):在 android.support.v4.view.ViewPager.populate(ViewPager.java:772)05-24 21:37:25.718:E/AndroidRuntime(551):在 android.support.v4.view.ViewPager.completeScroll(ViewPager.java:1539) 05-2421:37:25.718:E/AndroidRuntime(551):在 android.support.v4.view.ViewPager.computeScroll(ViewPager.java:1422) 05-2421:37:25.718:E/AndroidRuntime(551):在 android.view.ViewGroup.drawChild(ViewGroup.java:2729)05-24 21:37:25.718:E/AndroidRuntime(551):在 android.view.ViewGroup.dispatchDraw(ViewGroup.java:2489)05-24 21:37:25.718:E/AndroidRuntime(551):在 android.view.ViewGroup.drawChild(ViewGroup.java:2885)05-24 21:37:25.718:E/AndroidRuntime(551):在 android.view.ViewGroup.dispatchDraw(ViewGroup.java:2489)05-24 21:37:25.718:E/AndroidRuntime(551):在 android.view.ViewGroup.drawChild(ViewGroup.java:2885)05-24 21:37:25.718:E/AndroidRuntime(551):在 android.view.ViewGroup.dispatchDraw(ViewGroup.java:2489)05-24 21:37:25.718:E/AndroidRuntime(551):在 android.view.view.draw(view.java:10981)05-2421:37:25.718: E/AndroidRuntime(551):在 android.widget.FrameLayout.draw(FrameLayout.java:450)05-24 21:37:25.718:E/AndroidRuntime(551):在 com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:2126) 05-2421:37:25.718:E/AndroidRuntime(551):在 android.view.ViewRootImpl.draw(ViewRootImpl.java:2026)05-24 21:37:25.718:E/AndroidRuntime(551):在 performTraversals(ViewRootImpl.java:1634) 05-2421:37:25.718:E/AndroidRuntime(551):在 android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2442)05-24 21:37:25.718:E/AndroidRuntime(551):在 android.os.Handler.dispatchMessage(Handler.java:99)05-24 21:37:25.718:E/AndroidRuntime(551):在 android.os.Looper.loop(Looper.java:137)05-2421:37:25.718: E/AndroidRuntime(551):在 android.app.ActivityThread.main(ActivityThread.java:4424)05-24 21:37:25.718:E/AndroidRuntime(551):在 java.lang.reflect.Method.Invokenactive(本机方法)05-24 21:37:25.718:E/AndroidRuntime(551):在 java.lang.reflect.Method.invoke(Method.java:511)05-24 21:37:25.718: E/AndroidRuntime(551):在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 05-2421:37:25.718:E/AndroidRuntime(551):在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)05-24 21:37:25.718:E/AndroidRuntime(551):在 dalvik.system.NativeStart.main(本机方法)


看起来您使用的图像尺寸非常大,设备无法处理。尝试使用一些较小的尺寸

ViewPager适配器一次加载所有图像,这就是出现错误的原因。那么,实际原因是什么: 1.您的图像大小非常大 2.您没有正确使用图像资源。尝试将不同大小的图像放在不同的文件夹中,如ldpi、hdpi、xdpi文件夹。 尝试使用上述技巧。 如果仍然出现错误,可以执行以下操作:

  • 将FragmentPagerAdapter更改为FragmentStatePagerAdapter。这是因为FragmentPagerAdapter将永远保留加载到内存中的所有视图。其中FragmentStatePagerAdapter处理当前视图和可遍历视图之外的视图

  • 重写适配器方法getItemPosition(如下所示)。当我们调用mAdapter.notifyDataSetChanged()时;ViewPager询问适配器,以确定在定位方面发生了什么变化。我们使用此方法表示一切都已更改,因此重新处理所有视图定位。 实际答案如下:


  • 我把FragmentPagerAdapter改成了FragmentStatePagerAdapter。然而,滑动运动相当缓慢。似乎它暂时解决了这个问题

    /**
     * The {@link android.support.v4.view.PagerAdapter} that will provide
     * fragments for each of the sections. We use a
     * {@link android.support.v4.app.FragmentPagerAdapter} derivative, which
     * will keep every loaded fragment in memory. If this becomes too memory
     * intensive, it may be best to switch to a
     * {@link android.support.v4.app.FragmentStatePagerAdapter}.
     */
    

    此处提供详细教程

    您是使用片段还是活动实现viewpager??给我们看看你的代码部分。你可以在这里找到答案。希望这可以正常工作。我正在使用一个活动。我尝试过减小大多数图像的大小,但仍然崩溃。。
    /**
     * The {@link android.support.v4.view.PagerAdapter} that will provide
     * fragments for each of the sections. We use a
     * {@link android.support.v4.app.FragmentPagerAdapter} derivative, which
     * will keep every loaded fragment in memory. If this becomes too memory
     * intensive, it may be best to switch to a
     * {@link android.support.v4.app.FragmentStatePagerAdapter}.
     */