Android Studio:E/UncaughtException:java.lang.OutOfMemoryError

Android Studio:E/UncaughtException:java.lang.OutOfMemoryError,java,android,Java,Android,我一直在寻找解决我问题的办法。最常见的建议是将android:hardwareAccelerated=“false”和android:largeHeap=“true”添加到清单中的应用程序标记中,但是我仍然会遇到以下错误: E/UncaughtException:java.lang.OutOfMemoryError:无法分配56272字节的分配,该分配包含19848个可用字节和19KB的内存 位于java.lang.StringBuilder.toString(StringBuilder.ja

我一直在寻找解决我问题的办法。最常见的建议是将android:hardwareAccelerated=“false”和android:largeHeap=“true”添加到清单中的应用程序标记中,但是我仍然会遇到以下错误:

E/UncaughtException:java.lang.OutOfMemoryError:无法分配56272字节的分配,该分配包含19848个可用字节和19KB的内存
位于java.lang.StringBuilder.toString(StringBuilder.java:408)
位于org.chromiu.content\u public.browser.LoadUrlParams.buildDataUri(LoadUrlParams.java:113)
在org.chromiu.content\u public.browser.LoadUrlParams.createLoadDataParamsWithBaseUrl(LoadUrlParams.java:164)上
位于org.chromiu.android_webview.AwContents.loadDataWithBaseURL(AwContents.java:1523)
位于com.android.webview.chromium.webviewcromium.loadDataWithBaseURL(webviewcromium.java:609)
位于android.webkit.WebView.loadDataWithBaseURL(WebView.java:1015)
位于com.google.android.gms.internal.zzakn.loadDataWithBaseURL(未知来源)
位于com.google.android.gms.internal.zzakm.loadDataWithBaseURL(未知来源)
位于com.google.android.gms.internal.zzxy.zzgo(未知来源)
位于com.google.android.gms.internal.zzxq.zzgp(未知来源)
在com.google.android.gms.internal.zzxw.zza(未知来源)
位于com.google.android.gms.ads.internal.zzl.run(未知来源)
位于android.os.Handler.handleCallback(Handler.java:751)
位于android.os.Handler.dispatchMessage(Handler.java:95)
位于android.os.Looper.loop(Looper.java:154)
位于android.app.ActivityThread.main(ActivityThread.java:6119)
位于java.lang.reflect.Method.invoke(本机方法)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)上
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
---------坠机开始
E/AndroidRuntime:致命异常:主
java.lang.OutOfMemoryError:无法分配56272字节的分配,该分配包含19848个可用字节和19KB的内存
位于java.lang.StringBuilder.toString(StringBuilder.java:408)
位于org.chromiu.content\u public.browser.LoadUrlParams.buildDataUri(LoadUrlParams.java:113)
在org.chromiu.content\u public.browser.LoadUrlParams.createLoadDataParamsWithBaseUrl(LoadUrlParams.java:164)上
位于org.chromiu.android_webview.AwContents.loadDataWithBaseURL(AwContents.java:1523)
位于com.android.webview.chromium.webviewcromium.loadDataWithBaseURL(webviewcromium.java:609)
位于android.webkit.WebView.loadDataWithBaseURL(WebView.java:1015)
位于com.google.android.gms.internal.zzakn.loadDataWithBaseURL(未知来源)
位于com.google.android.gms.internal.zzakm.loadDataWithBaseURL(未知来源)
位于com.google.android.gms.internal.zzxy.zzgo(未知来源)
位于com.google.android.gms.internal.zzxq.zzgp(未知来源)
在com.google.android.gms.internal.zzxw.zza(未知来源)
位于com.google.android.gms.ads.internal.zzl.run(未知来源)
位于android.os.Handler.handleCallback(Handler.java:751)
位于android.os.Handler.dispatchMessage(Handler.java:95)
位于android.os.Looper.loop(Looper.java:154)
位于android.app.ActivityThread.main(ActivityThread.java:6119)
位于java.lang.reflect.Method.invoke(本机方法)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)上

在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
我的建议是修改您的代码,从
ImageItem
类中删除
Bitmap
实例,如下所示

public class ImageItem {

    private int arrayIndex;
    private int imageResource;
    private String title;

    public ImageItem(int arrayIndex, int imageResource, String title) {
        super();
        this.arrayIndex = arrayIndex;
        this.imageResource = imageResource;
        this.title = title;
    }

    public int getImageResource() {
        return imageResource;
    }

    public void setImageResource(int imageResource) {
        this.imageResource = imageResource;
    }

    // rest methods should be same

}
public class GridViewAdapter extends ArrayAdapter<ImageItem> {

    // your old logic here

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        // your old logic here

        // holder.image.setImageBitmap(item.getImage());
        Picasso.with(context).load(item.getImageResource()).into(holder.image);
    }

    // your old logic here

}
dependencies {
    ...
    compile 'com.squareup.picasso:picasso:2.5.0'
    ...
}
GridViewAdapter
类中,从资源id加载图像,如下所示

public class ImageItem {

    private int arrayIndex;
    private int imageResource;
    private String title;

    public ImageItem(int arrayIndex, int imageResource, String title) {
        super();
        this.arrayIndex = arrayIndex;
        this.imageResource = imageResource;
        this.title = title;
    }

    public int getImageResource() {
        return imageResource;
    }

    public void setImageResource(int imageResource) {
        this.imageResource = imageResource;
    }

    // rest methods should be same

}
public class GridViewAdapter extends ArrayAdapter<ImageItem> {

    // your old logic here

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        // your old logic here

        // holder.image.setImageBitmap(item.getImage());
        Picasso.with(context).load(item.getImageResource()).into(holder.image);
    }

    // your old logic here

}
dependencies {
    ...
    compile 'com.squareup.picasso:picasso:2.5.0'
    ...
}
最后一个是在应用程序的
build.gradle
中添加编译依赖项,如下所示

public class ImageItem {

    private int arrayIndex;
    private int imageResource;
    private String title;

    public ImageItem(int arrayIndex, int imageResource, String title) {
        super();
        this.arrayIndex = arrayIndex;
        this.imageResource = imageResource;
        this.title = title;
    }

    public int getImageResource() {
        return imageResource;
    }

    public void setImageResource(int imageResource) {
        this.imageResource = imageResource;
    }

    // rest methods should be same

}
public class GridViewAdapter extends ArrayAdapter<ImageItem> {

    // your old logic here

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        // your old logic here

        // holder.image.setImageBitmap(item.getImage());
        Picasso.with(context).load(item.getImageResource()).into(holder.image);
    }

    // your old logic here

}
dependencies {
    ...
    compile 'com.squareup.picasso:picasso:2.5.0'
    ...
}

完成。

错误是因为
getData
方法将每个位图存储在内存中,而应用程序因内存不足而崩溃。Better选项不是将位图链接到
ImageItem
类对象,而是使用图像路径的
URI
,然后使用任何图像加载程序库(如
Picasso
谢谢ELITE,您是否有任何代码调整建议来解决此问题?我很自豪自己能走到这一步,现在我只需要解决最后一个错误:DYou可以用压缩级别存储位图,因为大多数时候,当你试图处理位图时,你会遇到OOMHi@AjayPandya,你能告诉我如何在代码中更改它吗?我会非常感激的