Android OutOfMemoryError в строке SetContentView

Когда я пытаюсь открыть свой чат-класс, иногда он работает правильно, иногда он дает OutOfMemoryError в строке setContentView. Я не могу понять, в чем причина проблемы? Вот мой xml-код:

<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#ffffff" android:orientation="vertical"> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent" android:background="#00000000" android:orientation="vertical"> <android.support.v7.widget.Toolbar android:id="@+id/toolbarmesajlasma" android:layout_width="match_parent" android:layout_height="50dp" android:background="@color/ColorPrimary" android:elevation="1dp"> <RelativeLayout android:id="@+id/layoutmesajlasma" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#00000000"> <ImageButton android:id="@+id/button6" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="0dp" android:layout_centerVertical="true" android:background="#00000000" android:longClickable="false" android:src="@mipmap/geribas" /> <ImageButton android:id="@+id/imageButton" android:layout_width="43dp" android:layout_height="43dp" android:layout_marginLeft="35dp" android:background="#00000000" android:layout_centerVertical="true" /> <TextView android:id="@+id/textView2" android:layout_width="135dp" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_marginLeft="85dp" android:text="Abdurrahman" android:textAppearance="?android:attr/textAppearanceLarge" android:layout_centerVertical="true" android:textColor="#ffffff" android:textIsSelectable="false" android:textSize="15dp" android:textStyle="bold" /> </RelativeLayout> </android.support.v7.widget.Toolbar> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_centerHorizontal="true" android:orientation="vertical" android:layout_below="@+id/toolbarmesajlasma" android:background="@mipmap/maybehi"> <ListView android:id="@+id/listView2" android:layout_width="match_parent" android:layout_height="wrap_content" android:divider="#00000000" android:dividerHeight="4dp" android:layout_alignParentTop="true" android:layout_above="@+id/linearLayout" /> <LinearLayout android:orientation="horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:background="@mipmap/bisiler_yaz_altplan" android:id="@+id/linearLayout"> <EditText android:id="@+id/editText2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/bisiler_yaz" android:hint="Bir mesaj yaz..." android:imeOptions="actionNone" android:textSize="14dp" android:textStyle="bold" android:layout_marginRight="5dp" android:layout_marginLeft="7dp" android:layout_marginTop="5dp" android:capitalize="sentences" android:allowUndo="true" android:width="295dp" android:inputType="textCapSentences" /> <ImageButton android:id="@+id/button4" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="false" android:layout_alignParentEnd="true" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:layout_gravity="bottom" android:background="#00000000" android:src="@mipmap/gonder" android:text="Gonder" android:layout_marginBottom="10dp" /> </LinearLayout> </RelativeLayout> </RelativeLayout> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/ivYatay" android:src="@drawable/horizontalrope" android:layout_marginTop="56dp" android:layout_marginLeft="118dp"/> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/ivCapraz" android:src="@drawable/diagonalrope" android:layout_marginTop="50dp" android:layout_marginLeft="92dp"/> <ImageView android:layout_width="fill_parent" android:layout_height="fill_parent" android:visibility="invisible" android:id="@+id/imageView6" android:background="@mipmap/gri" android:layout_marginTop="45dp" /> </FrameLayout> 

Вот ошибка:

 java.lang.OutOfMemoryError at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method) at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:683) at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:513) at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:889) at android.content.res.Resources.loadDrawable(Resources.java:3436) at android.content.res.TypedArray.getDrawable(TypedArray.java:602) at android.view.View.<init>(View.java:3708) at android.widget.ImageView.<init>(ImageView.java:127) at android.support.v7.widget.AppCompatImageView.<init>(AppCompatImageView.java:57) at android.support.v7.widget.AppCompatImageView.<init>(AppCompatImageView.java:53) at android.support.v7.app.AppCompatViewInflater.createView(AppCompatViewInflater.java:106) at android.support.v7.app.AppCompatDelegateImplV7.createView(AppCompatDelegateImplV7.java:963) at android.support.v7.app.AppCompatDelegateImplV7.onCreateView(AppCompatDelegateImplV7.java:1022) at android.support.v4.view.LayoutInflaterCompatHC$FactoryWrapperHC.onCreateView(LayoutInflaterCompatHC.java:44) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:690) at android.view.LayoutInflater.rInflate(LayoutInflater.java:761) at android.view.LayoutInflater.inflate(LayoutInflater.java:498) at android.view.LayoutInflater.inflate(LayoutInflater.java:398) at android.view.LayoutInflater.inflate(LayoutInflater.java:354) at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:267) at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:129) at droxoft.armin.com.shappy.Mesajlasma.onCreate(Mesajlasma.java:223) at android.app.Activity.performCreate(Activity.java:5451) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1093) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2377) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2471) at android.app.ActivityThread.access$900(ActivityThread.java:175) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1308) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:146) at android.app.ActivityThread.main(ActivityThread.java:5602) 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:1283) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099) at dalvik.system.NativeStart.main(Native Method) 

Ваша ошибка OOM связана с изображениями, которые вы загружаете, как я вижу в трассировке журнала.

См. Это для большей загрузки больших растровых изображений:

400-килобайтный файл изображения может легко занять 5-10 МБ ОЗУ.

Для запроса динамического размера кучи, используйте android:largeHeap="true" в manifest.xml.

Или / и просто использовать надлежащую функцию для декодирования …

Я бы проверил размер всех ваших изображений, упомянутых в вашем ImageViews. Если они большие, возможно, они кодируют их как разные типы изображений, чтобы уменьшить размер изображения. В системе Android периодически не хватает памяти и сбоя приложения. Имеет смысл, что вы получаете это только иногда, поскольку это зависит от того, сколько памяти в настоящее время используется для других приложений и т. Д. …. Если вы значительно уменьшите размер своих изображений, вы сможете решить эту проблему.

Несколько вещей, на которые нужно смотреть.

Предоставили ли вы фоновое изображение (ы) для нескольких плотностей? Масштабирование иногда потребляет много памяти.

Используете ли вы startActivity или startActivityForResult ()? В последнем случае ваши старые объекты Activity не могут быть уничтожены.

Собираете ли вы информацию в классе Application?

Увеличьте gradle.properties в корне вашего проекта:

org.gradle.jvmargs=-XX:MaxHeapSize\=512m -Xmx512m

По умолчанию jvmargs составляет 256

Вы можете попросить использовать больше с помощью.

 android:largeHeap="true" 

В manifest.xml.