【问题标题】:Too many ImageButton makes the app crashImageButton 过多导致应用崩溃
【发布时间】:2017-04-23 17:05:15
【问题描述】:

在我的 Android 应用程序中,我必须在选项卡式活动的第一个片段中显示大约 43 个 ImageButton,在另一个片段中显示其他不同的 43 个。第一个工作正常,当我添加应用程序崩溃的第二个片段时。不仅如此,如果我想显示在应用程序崩溃之前从未使用过的特定图像,请单击我的 ImageButton 之一。

我的可绘制文件夹中的图像为 1MB(共 159 张图像),所以我真的不知道是否太多。

这是出现的错误消息:

E/AndroidRuntime:致命异常:主进程: com.example.myname.hira_kana,PID:6672 java.lang.OutOfMemoryError: 未能分配 9000012 字节分配和 204192 可用字节 和 199KB 直到 OOM dalvik.system.VMRuntime.newNonMovableArray(Native Method) 在 android.graphics.BitmapFactory.nativeDecodeAsset(Native Method) 在 android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:620) 在 android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:455) 在 android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:1155) 在 android.content.res.ResourcesImpl.loadDrawableForCookie(ResourcesImpl.java:720) 在 android.content.res.ResourcesImpl.loadDrawable(ResourcesImpl.java:571) 在 android.content.res.Resources.getDrawable(Resources.java:771) 在 android.content.Context.getDrawable(Context.java:525) 在 android.support.v4.content.ContextCompatApi21.getDrawable(ContextCompatApi21.java:30) 在 android.support.v4.content.ContextCompat.getDrawable(ContextCompat.java:372) 在 android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:202) 在 android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:190) 在 android.support.v7.content.res.AppCompatResources.getDrawable(AppCompatResources.java:100) 在 android.support.v7.widget.AppCompatImageHelper.loadFromAttributes(AppCompatImageHelper.java:54) 在 android.support.v7.widget.AppCompatImageButton.(AppCompatImageButton.java:66) 在 android.support.v7.widget.AppCompatImageButton.(AppCompatImageButton.java:56) 在 android.support.v7.app.AppCompatViewInflater.createView(AppCompatViewInflater.java:118) 在 android.support.v7.app.AppCompatDelegateImplV9.createView(AppCompatDelegateImplV9.java:1021) 在 android.support.v7.app.AppCompatDelegateImplV9.onCreateView(AppCompatDelegateImplV9.java:1080) 在 android.support.v4.view.LayoutInflaterCompatHC$FactoryWrapperHC.onCreateView(LayoutInflaterCompatHC.java:47) 在 android.view.LayoutInflater$FactoryMerger.onCreateView(LayoutInflater.java:192) 在 android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:769) 在 android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:727) 在 android.view.LayoutInflater.rInflate(LayoutInflater.java:858) 在 android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:821) 在 android.view.LayoutInflater.rInflate(LayoutInflater.java:861) 在 android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:821) 在 android.view.LayoutInflater.rInflate(LayoutInflater.java:861) 在 android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:821) 在 android.view.LayoutInflater.rInflate(LayoutInflater.java:861) 在 android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:821) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:518) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:426) 在 layout.frkata.onCreateView(frkata.java:56) 在 android.support.v4.app.Fragment.performCreateView(Fragment.java:2189) 在 android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1299) 在 android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1528) 在

(我不会发布所有错误,因为该网站认为这是垃圾邮件)

非常感谢您。

【问题讨论】:

  • 您正在尝试分配 9000012 字节。这相当于一个 1500x1500 像素的图像。 这太大了。 “我的可绘制文件夹中的图像是 1MB”——这毫无意义。重要的是内存大小,磁盘上的图像以压缩形式存储。

标签: java android android-layout android-fragments


【解决方案1】:

将此粘贴​​到清单文件中:-

android:largeHeap="true"

另请阅读:http://dwij.co.in/increase-heap-size-of-android-application/

例子:-

<application 
    android:name=".MyApplication"
     android:allowBackup="true"
     android:icon="@drawable/ic_launcher"
     android:label="Mall" android:largeHeap="true" 
     android:logo="@drawable/logo_for_up"
     android:screenOrientation="portrait"
     android:theme="@style/AppTheme" >
</application>

【讨论】:

  • 除非真正必要,否则应避免将其作为任何解决方案。你应该试着去学习和解决问题,而不是贴上绷带说它已经解决了。
【解决方案2】:

问题可能是因为您的图片可能非常大。请创建高度和宽度小的位图,然后在 Imageview 中使用这些图像。 您可以使用以下代码创建小位图:

 bitmap = Bitmap.createScaledBitmap(bitmap, outWidth, outHeight, true);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-19
    • 2022-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-17
    相关资源
    最近更新 更多