Android:启动抽屉布局时出现内存不足错误
Android: Out of memory Error on launch of Drawer layout
我在调试代码时遇到内存不足错误,它在以下代码行中失败:
setContentView(R.layout.activity_drawer);
错误如下:
01-01 23:16:14.611 24083-24083/? E/CrashReporting﹕ ParseCrashReporting caught a OutOfMemoryError exception for wishlist.oj.app. Building report.
01-01 23:16:14.613 24083-24083/? E/CrashReporting﹕ Handling exception for crash
java.lang.OutOfMemoryError: Failed to allocate a 86400012 byte allocation with 16777120 free bytes and 66MB until OOM
at dalvik.system.VMRuntime.newNonMovableArray(Native Method)
at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:609)
at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:444)
at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:988)
at android.content.res.Resources.loadDrawableForCookie(Resources.java:2578)
at android.content.res.Resources.loadDrawable(Resources.java:2471)
at android.content.res.TypedArray.getDrawable(TypedArray.java:749)
at android.widget.ImageView.<init>(ImageView.java:146)
at android.widget.ImageView.<init>(ImageView.java:135)
at android.support.v7.widget.AppCompatImageView.<init>(AppCompatImageView.java:58)
at android.support.v7.widget.AppCompatImageView.<init>(AppCompatImageView.java:54)
at android.support.v7.app.AppCompatViewInflater.createView(AppCompatViewInflater.java:95)
at android.support.v7.app.AppCompatDelegateImplV7.createView(AppCompatDelegateImplV7.java:938)
at android.support.v7.app.AppCompatDelegateImplV7.onCreateView(AppCompatDelegateImplV7.java:992)
at android.support.v4.view.LayoutInflaterCompatHC$FactoryWrapperHC.onCreateView(LayoutInflaterCompatHC.java:44)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:725)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:806)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:809)
at android.view.LayoutInflater.inflate(LayoutInflater.java:504)
at android.view.LayoutInflater.inflate(LayoutInflater.java:414)
at android.view.LayoutInflater.inflate(LayoutInflater.java:365)
at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:256)
at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:109)
at wishlist.oj.app.home.ActivityDrawer.onCreate(ActivityDrawer.java:34)
at android.app.Activity.performCreate(Activity.java:6072)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2315)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2424)
at android.app.ActivityThread.access0(ActivityThread.java:155)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1323)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:139)
我的 activity_drawer XML 代码如下所示:
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:id="@+id/drawer_layout"
tools:context=".ActivityDrawer">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<android.support.v7.widget.Toolbar
android:id="@+id/tool_bar"
theme="@style/MyToolbarThemeSimple.Base"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:minHeight="?attr/actionBarSize"
android:background="@color/colorPrimary"
>
</android.support.v7.widget.Toolbar>
<FrameLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
</FrameLayout>
</LinearLayout>
<!-- The Navigation drawer -->
<RelativeLayout
android:layout_width="240dp"
android:layout_height="match_parent"
android:background="@color/windowBackground"
android:id="@+id/drawer"
android:layout_gravity="start">
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:id="@+id/cardview_drawer"
/>
</RelativeLayout>
</android.support.v4.widget.DrawerLayout>
我已经尝试了很多事情,比如我通过使用编译器 VM 选项将堆大小增加到 -Xmx2048m -XX:MaxPermSize=512m。
另外,我检查了设置中存在的选项 "compile independent modules in parallel" => 构建、执行、开发环境 => 编译器
但是没有任何结果..有帮助吗??
如果您的图像太大而无法加载(导致OutOfMemoryError
。
,通常会出现此类错误
我建议缩小您的图像,或使用较低分辨率的图像,以便更容易将其加载到内存中。
您还可以访问各种资源,包括 Android developer docs with a sample app, as well as YouTube videos such as this one。
A link 展示了如何使用示例代码有效地加载位图。
http://developer.android.com/training/displaying-bitmaps/load-bitmap.html
我在调试代码时遇到内存不足错误,它在以下代码行中失败:
setContentView(R.layout.activity_drawer);
错误如下:
01-01 23:16:14.611 24083-24083/? E/CrashReporting﹕ ParseCrashReporting caught a OutOfMemoryError exception for wishlist.oj.app. Building report.
01-01 23:16:14.613 24083-24083/? E/CrashReporting﹕ Handling exception for crash
java.lang.OutOfMemoryError: Failed to allocate a 86400012 byte allocation with 16777120 free bytes and 66MB until OOM
at dalvik.system.VMRuntime.newNonMovableArray(Native Method)
at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:609)
at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:444)
at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:988)
at android.content.res.Resources.loadDrawableForCookie(Resources.java:2578)
at android.content.res.Resources.loadDrawable(Resources.java:2471)
at android.content.res.TypedArray.getDrawable(TypedArray.java:749)
at android.widget.ImageView.<init>(ImageView.java:146)
at android.widget.ImageView.<init>(ImageView.java:135)
at android.support.v7.widget.AppCompatImageView.<init>(AppCompatImageView.java:58)
at android.support.v7.widget.AppCompatImageView.<init>(AppCompatImageView.java:54)
at android.support.v7.app.AppCompatViewInflater.createView(AppCompatViewInflater.java:95)
at android.support.v7.app.AppCompatDelegateImplV7.createView(AppCompatDelegateImplV7.java:938)
at android.support.v7.app.AppCompatDelegateImplV7.onCreateView(AppCompatDelegateImplV7.java:992)
at android.support.v4.view.LayoutInflaterCompatHC$FactoryWrapperHC.onCreateView(LayoutInflaterCompatHC.java:44)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:725)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:806)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:809)
at android.view.LayoutInflater.inflate(LayoutInflater.java:504)
at android.view.LayoutInflater.inflate(LayoutInflater.java:414)
at android.view.LayoutInflater.inflate(LayoutInflater.java:365)
at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:256)
at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:109)
at wishlist.oj.app.home.ActivityDrawer.onCreate(ActivityDrawer.java:34)
at android.app.Activity.performCreate(Activity.java:6072)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2315)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2424)
at android.app.ActivityThread.access0(ActivityThread.java:155)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1323)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:139)
我的 activity_drawer XML 代码如下所示:
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:id="@+id/drawer_layout"
tools:context=".ActivityDrawer">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<android.support.v7.widget.Toolbar
android:id="@+id/tool_bar"
theme="@style/MyToolbarThemeSimple.Base"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:minHeight="?attr/actionBarSize"
android:background="@color/colorPrimary"
>
</android.support.v7.widget.Toolbar>
<FrameLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
</FrameLayout>
</LinearLayout>
<!-- The Navigation drawer -->
<RelativeLayout
android:layout_width="240dp"
android:layout_height="match_parent"
android:background="@color/windowBackground"
android:id="@+id/drawer"
android:layout_gravity="start">
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:id="@+id/cardview_drawer"
/>
</RelativeLayout>
</android.support.v4.widget.DrawerLayout>
我已经尝试了很多事情,比如我通过使用编译器 VM 选项将堆大小增加到 -Xmx2048m -XX:MaxPermSize=512m。
另外,我检查了设置中存在的选项 "compile independent modules in parallel" => 构建、执行、开发环境 => 编译器
但是没有任何结果..有帮助吗??
如果您的图像太大而无法加载(导致OutOfMemoryError
。
我建议缩小您的图像,或使用较低分辨率的图像,以便更容易将其加载到内存中。
您还可以访问各种资源,包括 Android developer docs with a sample app, as well as YouTube videos such as this one。
A link 展示了如何使用示例代码有效地加载位图。
http://developer.android.com/training/displaying-bitmaps/load-bitmap.html