无法分配具有16777120个空闲字节的105949236字节分配和直到OOM的40MB

时间:2016-04-26 10:42:47

标签: android google-maps out-of-memory

当我尝试移动到我的Android应用中的地图活动时,我收到以下错误。我通过阅读其他类似的问题尝试了许多不同的方法来修复它,但我无法修复它。如果有人可以请求帮助,谢谢。

这是我收到的日志文件中的错误。

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)

Gradle文件:

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'
}

2 个答案:

答案 0 :(得分:2)

您的resizeMapIcons()方法正在尝试使用decodeResource(),这就是触发105949236字节的分配。那是~100MB。它相当于5146px×5146px图像。没有Android 屏幕就是那个尺寸;你当然不需要那么大的图标

您需要找到此资源并大幅降低其分辨率。

答案 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"
}

这是因为服务包含了项目可能不需要的所有库。所以使用你真正需要的东西

也请参考this