2016-04-26 66 views
-4

當我嘗試移動到我的android應用程序中的地圖活動時出現以下錯誤。我嘗試了很多不同的方法來解決它,通過閱讀其他類似的問題,但我無法修復它。如果有人可以請幫忙,謝謝。無法分配105949236字節分配,16777120空閒字節和40MB,直到OOM

這是我收到的日誌文件中的錯誤。

FATAL EXCEPTION: main 
Process: com.example.neil.studicom, PID: 30587 
java.lang.OutOfMemoryError: Failed to allocate a 105949236 byte allocation with 16777120 free bytes and 40MB until OOM 
    at dalvik.system.VMRuntime.newNonMovableArray(Native Method) 
    at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method) 
    at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:726) 
    at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:547) 
    at android.graphics.BitmapFactory.decodeResource(BitmapFactory.java:575) 
    at android.graphics.BitmapFactory.decodeResource(BitmapFactory.java:605) 
    at com.example.neil.studicom.MapsActivity.resizeMapIcons(MapsActivity.java:42) 
    at com.example.neil.studicom.MapsActivity.onMapReady(MapsActivity.java:53) 
    at com.google.android.gms.maps.SupportMapFragment$zza$1.zza(Unknown Source) 
    at com.google.android.gms.maps.internal.zzo$zza.onTransact(Unknown Source) 
    at android.os.Binder.transact(Binder.java:380) 
    at com.google.android.gms.maps.internal.v$a$a.a(:com.google.android.gms.alldynamite:82) 
    at maps.ei.bu$6.run(Unknown Source) 
    at android.os.Handler.handleCallback(Handler.java:739) 
    at android.os.Handler.dispatchMessage(Handler.java:95) 
    at android.os.Looper.loop(Looper.java:145) 
    at android.app.ActivityThread.main(ActivityThread.java:5951) 
    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:1400) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1195) 

搖籃文件:

apply plugin: 'com.android.application' 

android { 
    compileSdkVersion 23 
    buildToolsVersion "23.0.2" 

    /* dexOptions { 
     javaMaxHeapSize "4g" 
    }*/ 

    defaultConfig { 
     applicationId "com.example.neil.studicom" 
     minSdkVersion 15 
     targetSdkVersion 23 
     versionCode 1 
     versionName "1.0" 
     multiDexEnabled true 
    } 
    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 
} 

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    testCompile 'junit:junit:4.12' 
    /*compile 'org.apache.httpcomponents:httpmime:4.5.1'*/ 
    compile 'com.android.support:appcompat-v7:23.2.1' 
    compile 'com.microsoft.azure:azure-mobile-services-android-sdk:2.0.3' 
    compile 'com.google.android.gms:play-services:8.4.0' 
    compile 'com.android.support:multidex:1.0.0' 
    compile 'com.android.support:design:23.2.1' 
    compile 'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2' 
    compile 'com.google.code.gson:gson:2.3' 
} 
+1

發佈你build.gradle文件 – Sanoop

+0

可能是因爲你使用的是所有的google服務..只使用你需要的..也啓用大堆 – Sanoop

+0

我發佈了我的gradle文件,謝謝。 – Dom

回答

2

resizeMapIcons()方法試圖使用decodeResource() ,並且正在觸發105949236字節的分配。那是〜100MB。它相當於5146px×5146px的圖像。沒有Android 屏幕就是那個尺寸;你當然不需要圖標那很大。

您需要查找此資源並大幅度降低其分辨率。

+0

謝謝你的幫助。錯誤的圖像已被使用。 – Dom

+0

sqrt(105949236/4)= 5146px(4來自每個rgba通道1個字節) –

0

刪除此

compile 'com.google.android.gms:play-services:8.4.0' 

,並添加

compile 'com.google.android.gms:play-services-maps:8.4.0' 
compile 'com.google.android.gms:play-services-location:8.4.0' 

,並在您gradle這個

dexOptions { 
    //incremental true 
    javaMaxHeapSize "2048M" 
} 

這是因爲該服務包含了所有你可能不會需要爲project..So庫使用什麼你到底需要

還提到this

+0

gradle部分是否必要? – Nfear

+0

不..但其預防步驟.. – Sanoop

+0

我已經按照這些步驟,沒有任何改變不幸。 – Dom

相關問題