Android 6.0上的Android java.lang.OutOfMemoryError

Android 6.0上的Android java.lang.OutOfMemoryError,java,android,android-6.0-marshmallow,Java,Android,Android 6.0 Marshmallow,所以我在play store上有一个应用程序,它可以帮助人们清理手机,我收到一些错误消息,当人们点击“清理”按钮时,应用程序会崩溃,因为outofmemoryerror。 以下是错误消息: java.lang.RuntimeException: An error occurred while executing doInBackground() at android.os.AsyncTask$3.done(AsyncTask.java:309) at java.util.conc

所以我在play store上有一个应用程序,它可以帮助人们清理手机,我收到一些错误消息,当人们点击“清理”按钮时,应用程序会崩溃,因为outofmemoryerror。 以下是错误消息:

java.lang.RuntimeException: An error occurred while executing doInBackground()
    at android.os.AsyncTask$3.done(AsyncTask.java:309)
    at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354)
    at java.util.concurrent.FutureTask.setException(FutureTask.java:223)
    at java.util.concurrent.FutureTask.run(FutureTask.java:242)
    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
    at java.lang.Thread.run(Thread.java:818)
Caused by: java.lang.OutOfMemoryError: Failed to allocate a 147468 byte allocation with 24512 free bytes and 23KB until OOM
    at dalvik.system.VMRuntime.newNonMovableArray(Native Method)
    at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
    at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:856)
    at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:675)
    at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:2228)
    at android.content.res.Resources.loadDrawableForCookie(Resources.java:4215)
    at android.content.res.Resources.loadDrawable(Resources.java:4089)
    at android.content.res.Resources.getDrawable(Resources.java:2005)
    at android.content.res.Resources.getDrawable(Resources.java:1987)
    at android.app.ApplicationPackageManager.getDrawable(ApplicationPackageManager.java:977)
    at android.app.ApplicationPackageManager.loadUnbadgedItemIcon(ApplicationPackageManager.java:2842)
    at android.app.ApplicationPackageManager.loadItemIcon(ApplicationPackageManager.java:2774)
    at android.content.pm.PackageItemInfo.loadIcon(PackageItemInfo.java:220)
    at android.content.pm.PackageItemInfo.loadIcon(PackageItemInfo.java:206)
    at panda.cleaner.cleaner_batterysaver.fragment.SoftwareManageFragment$1.doInBackground(SoftwareManageFragment.java:139)
    at panda.cleaner.cleaner_batterysaver.fragment.SoftwareManageFragment$1.doInBackground(SoftwareManageFragment.java:127)
    at android.os.AsyncTask$2.call(AsyncTask.java:295)
    at java.util.concurrent.FutureTask.run(FutureTask.java:237)
以下是错误来自的类:

task = new AsyncTask<Void, Integer, List<AppInfo>>() {
            private int mAppCount = 0;//(SoftwareManageFragment.java:127)

@Override
            protected List<AppInfo> doInBackground(Void... params) {
                PackageManager pm = mContext.getPackageManager();
                List<PackageInfo> packInfos = pm.getInstalledPackages(0);
                publishProgress(0, packInfos.size());
                List<AppInfo> appinfos = new ArrayList<AppInfo>();
                for (PackageInfo packInfo : packInfos) {
                    publishProgress(++mAppCount, packInfos.size());
                    final AppInfo appInfo = new AppInfo();
                    Drawable appIcon = packInfo.applicationInfo.loadIcon(pm);//(SoftwareManageFragment.java:139)
                    appInfo.setAppIcon(appIcon);

                    int flags = packInfo.applicationInfo.flags;

                    int uid = packInfo.applicationInfo.uid;

                    appInfo.setUid(uid);

                    if ((flags & ApplicationInfo.FLAG_SYSTEM) != 0) {
                        appInfo.setUserApp(false);//系统应用
                    } else {
                        appInfo.setUserApp(true);//用户应用
                    }
                    if ((flags & ApplicationInfo.FLAG_EXTERNAL_STORAGE) != 0) {
                        appInfo.setInRom(false);
                    } else {
                        appInfo.setInRom(true);
                    }
                    String appName = packInfo.applicationInfo.loadLabel(pm).toString();
                    appInfo.setAppName(appName);
                    String packname = packInfo.packageName;
                    appInfo.setPackname(packname);
                    String version = packInfo.versionName;
                    appInfo.setVersion(version);
                    try {
                        mGetPackageSizeInfoMethod.invoke(mContext.getPackageManager(), new Object[]{
                                packname,
                                new IPackageStatsObserver.Stub() {
                                    @Override
                                    public void onGetStatsCompleted(PackageStats pStats, boolean succeeded) throws RemoteException {
                                        synchronized (appInfo) {
                                            appInfo.setPkgSize(pStats.cacheSize + pStats.codeSize + pStats.dataSize);

                                        }
                                    }
                                }
                        });
                    } catch (Exception e) {
                    }

                    appinfos.add(appInfo);
                }
                return appinfos;
            }
task=newasynctask(){
私有int-mAppCount=0;//(SoftwareManageFragment.java:127)
@凌驾
受保护列表doInBackground(无效…参数){
PackageManager pm=mContext.getPackageManager();
List packInfos=pm.getInstalledPackages(0);
出版进度(0,packInfos.size());
List appinfos=new ArrayList();
用于(PackageInfo packInfo:packInfos){
publishProgress(++mAppCount,packInfos.size());
最终AppInfo AppInfo=新AppInfo();
Drawable appIcon=packInfo.applicationInfo.loadIcon(pm);/(SoftwareManageFragment.java:139)
appInfo.setAppIcon(appIcon);
int flags=packInfo.applicationInfo.flags;
int uid=packInfo.applicationInfo.uid;
appInfo.setUid(uid);
如果((标志和应用信息标志系统)!=0){
appInfo.setUserApp(false)//系统应用
}否则{
appInfo.setUserApp(true)//用户应用
}
如果((标志和应用程序信息标志\u外部存储)!=0){
appInfo.setInRom(false);
}否则{
appInfo.setInRom(true);
}
字符串appName=packInfo.applicationInfo.loadLabel(pm.toString();
appInfo.setAppName(appName);
字符串packname=packInfo.packageName;
appInfo.setPackname(packname);
字符串版本=packInfo.versionName;
appInfo.setVersion(版本);
试一试{
mgetPackageSizeInfo.invoke(mContext.getPackageManager(),新对象[]{
帕克纳姆,
新的IPackageStatsObserver.Stub(){
@凌驾
public void onGetStatsCompleted(PackageStats pStats,布尔值成功)引发RemoteException{
已同步(appInfo){
appInfo.setPkgSize(pStats.cacheSize+pStats.codeSize+pStats.dataSize);
}
}
}
});
}捕获(例外e){
}
appinfos.add(appInfo);
}
返回appinfos;
}

由于我只是一名初级开发人员,我不确定可能是什么问题。捕获此错误的特定手机使用的是Android 6.0。请提供帮助。提前感谢。这不是我想的主要问题。您应该检查内存监视器是否存在内存不足异常。首先打开出现的活动然后按下后退按钮,检查是否有泄漏。
对于此异常,您可以做的事情很少。
在android清单中,您应该在应用程序标记下追加largeheap=true。

您可以通过配置加载位图或可绘制文件,并降低其空间。我想这不是主要问题。您应该检查内存监视器是否存在内存不足异常。首先打开发生错误的活动,然后按“上一步”按钮,检查是否有泄漏。
对于此异常,您可以做的事情很少。
在android清单中,您应该在应用程序标记下追加largeheap=true。

您可以通过配置加载位图或可绘制文件,并降低其空间

您不能动态增加堆大小,但可以请求使用更多

因此,您必须在manifest.xml文件中添加
android:largeHeap=“true”
行,您的问题才能得到解决

大概是这样的:

<application
    android:largeHeap="true"
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
</application>

是否应使用大型Dalvik堆创建应用程序的进程。这适用于为应用程序创建的所有进程。它仅适用于加载到进程中的第一个应用程序;如果使用共享用户ID允许多个应用程序使用一个进程,则它们都必须一致地使用此选项,否则它们将无法使用此选项不可预测的结果。大多数应用不需要这样做,而应该专注于降低总体内存使用率以提高性能。启用这一点也不能保证固定的可用内存增加,因为某些设备受其总可用内存的限制


参考资料:@Maveňツ 回答

您不能动态增加堆大小,但可以请求使用更多

因此,您必须在manifest.xml文件中添加
android:largeHeap=“true”
行,您的问题才能得到解决

大概是这样的:

<application
    android:largeHeap="true"
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
</application>

是否应使用大型Dalvik堆创建应用程序的进程。这适用于为应用程序创建的所有进程。它仅适用于加载到进程中的第一个应用程序;如果使用共享用户ID允许多个应用程序使用一个进程,则它们都必须一致地使用此选项,否则它们将无法使用此选项不可预测的结果。大多数应用不需要这样做,而应该专注于降低总体内存使用率以提高性能。启用这一点也不能保证固定的可用内存增加,因为某些设备受其总可用内存的限制

参考资料:@Maveňツ 如果您有推荐信,请回答