加载Android活动的UI时出现Java内存不足错误
我一直在尝试加载一个非常基本的活动,其中包含on ImageButton、2个TextView、一个textField和一个ImageView加载Android活动的UI时出现Java内存不足错误,java,android,out-of-memory,Java,Android,Out Of Memory,我一直在尝试加载一个非常基本的活动,其中包含on ImageButton、2个TextView、一个textField和一个ImageView <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layou
<RelativeLayout 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:clickable="false"
android:id="@+id/namescreenactivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="Welcome to your Pet House"
android:id="@+id/Welcome"
android:textColor="#ff000000"
android:textStyle="bold"
android:layout_marginTop="94dp"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true" />
<EditText android:id="@+id/edit_message"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="@string/edit_message"
android:layout_marginTop="36dp"
android:textColor="#ff000000"
android:layout_below="@+id/Welcome"
android:layout_alignEnd="@+id/Welcome" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="Name your pet"
android:id="@+id/NameLabel"
android:layout_alignTop="@+id/edit_message"
android:layout_alignStart="@+id/Welcome" />
<ImageView
android:layout_width="100dp"
android:layout_height="100dp"
android:src="@drawable/sun"
android:layout_alignBottom="@+id/Welcome"
android:layout_alignParentEnd="true"
android:layout_marginBottom="39dp"
android:id="@+id/sun" />
<ImageButton
android:layout_width="250dp"
android:layout_height="250dp"
android:id="@+id/imageButton"
android:src="@drawable/camel"
android:clickable="true"
android:scaleType="fitXY"
android:onClick="sendMessage"
android:layout_alignParentBottom="true"
android:layout_alignEnd="@+id/edit_message"
android:layout_marginBottom="31dp" />
在MainActivity.java的OnCreate函数中,我只是调用setContentViewR.layout.activity_main;
然而,我的应用程序的内存使用情况图表显示,尽管我在应用程序中的所有图像的总大小小于1MB,用于ImageButton的图像的总大小为193KB,但我使用的内存约为44MB
我相信这就是我的应用程序崩溃并抛出内存不足错误的原因
Caused by: java.lang.OutOfMemoryError: Failed to allocate a 138018828 byte allocation with 4194304 free bytes and 35MB 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:2474)
at android.content.res.Resources.loadDrawable(Resources.java:2381)
at android.content.res.TypedArray.getDrawable(TypedArray.java:749)
at android.widget.ImageView.<init>(ImageView.java:146)
at android.widget.ImageButton.<init>(ImageButton.java:86)
at android.widget.ImageButton.<init>(ImageButton.java:82)
at android.widget.ImageButton.<init>(ImageButton.java:78)
at java.lang.reflect.Constructor.newInstance(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:288)
at android.view.LayoutInflater.createView(LayoutInflater.java:607)
at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:55)
at android.view.LayoutInflater.onCreateView(LayoutInflater.java:682)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:741)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:806)
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 com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:378)
at android.app.Activity.setContentView(Activity.java:2145)
at com.example.healthypetdhr.MainActivity.onCreate(MainActivity.java:37)
at android.app.Activity.performCreate(Activity.java:5990)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2390)
at android.app.ActivityThread.access$800(ActivityThread.java:151)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5257)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)'
请帮助我找出问题所在,以及如何解决此问题。当图像较大且放置在drawableldpi/mdpi中时,可能会发生这种情况。。。文件夹,以便android操作系统根据需要调整它们的大小,但在您的情况下,您说它们非常小,仍然尝试将这些图像放入其中:
res/drawable-nodpi
文件夹,以避免它们重新缩放和按原样使用。很可能是您正在使用的绘图工具导致了此问题。 你可以参考他的问题
图像解码为位图后可能需要更多的内存空间,您可以使用位图选项,修改参数以调整其大小 您可能希望清理和刷新项目 按照人们所说的检查res文件夹 有关更多信息,请参阅本研究:
您能否同时提供@drawable/sun和@drawable/camel图像?请记住,图像在绘制时会解码为位图。这是正常的,但需要比APK中的文件多得多的内存。不要直接将大图像加载到imageview,而是使用位图选项将其大小调整为所需大小,然后设置为imageview。我应该如何使用回答中提到的getAssetImage方法?你能指引我吗?