2016-05-06 88 views
3

當我嘗試打開我的聊天類,有時它運行正常,有時它會給setContentView lineOutOfMemoryError。我無法理解是什麼問題的原因? 這裏是我的XML代碼:Android的OutOfMemoryError在SetContentView行

<?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) 
+1

您是否正在從服務器加載圖片?用Picasso或Glide庫替換您的圖像加載庫 – Pehlaj

+0

ypu需要增加堆大小檢查http://stackoverflow.com/a/37072456/2826147 –

回答

4

你的OOM錯誤與您加載,因爲我在你的日誌跟蹤我看到的圖像。

更有效地裝載大位圖見this

A 400 KB的圖像文件可以輕鬆地佔用5-10 MB的RAM。

要請求動態增加堆大小,請在manifest.xml中使用android:largeHeap="true"

和/或只使用適當的功能來解碼...

2

我會檢查你的ImageViews提及的所有圖片的大小。如果它們很大,可能將它們編碼爲不同的圖像類型以減小圖像大小。 Android系統會定期耗盡內存並導致您的應用程序崩潰。這是有道理的,你只有有時得到這個,因爲它取決於多少內存當前正在用於其他應用程序等。如果你顯着減小圖像的大小,你應該可以解決這個問題。

2

有幾件事要看。

你提供了幾種密度的背景圖片嗎?縮放有時會消耗大量內存。

你使用startActivity或startActivityForResult()嗎?在後一種情況下,舊的Activity對象不能被銷燬。

您是否在應用程序類中收集信息?

0

提高項目的根gradle.properties:

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

默認jvmargs是256

您可以要求通過使用較多。

android:largeHeap="true" 

在manifest.xml中。