本文介绍了Android的 - 内存不足的错误。当它运行在真实的设备的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个图片库的应用程序,而我试图从外部Storage.My应用程序映像可以在Android模拟器,但在实际设备(HTC ONEX)我得到了一些异常运行。

I have an image gallery application, and I'm trying to get image from External Storage.My application can run on android emulator but on real device(HTC OneX) I got some exception.

我在这里的登录猫。

07-25 17:17:49.027:E / dalvikvm堆(3008):内存在480016字节分配。  07-25 17:17:49.052:E / dalvikvm(3008):内存:堆大小= 65571KB,分配= 63717KB,限= 65536KB  07-25 17:17:49.052:E / dalvikvm(3008):额外的信息:足迹= 65315KB,允许的排放量= 65571KB,裁剪= 0KB  07-25 17:17:49.052:E / MediaStore(3008):未能分配内存的缩略图内容://媒体/外部/图像/缩略图/ 300; java.lang.OutOfMemoryError:(堆大小= 65571KB,分配= 63717KB)  07-25 17:17:49.142:E / dalvikvm堆(3008):内存在480016字节分配。  07-25 17:17:49.152:E / dalvikvm(3008):内存:堆大小= 65571KB,分配= 63718KB,限= 65536KB  07-25 17:17:49.152:E / dalvikvm(3008):额外的信息:足迹= 65315KB,允许的排放量= 65571KB,裁剪= 0KB  07-25 17:17:49.152:E / MediaStore(3008):未能分配内存的缩略图内容://媒体/外部/图像/缩略图/ 300; java.lang.OutOfMemoryError:(堆大小= 65571KB,分配= 63718KB)  07-25 17:17:49.302:E / dalvikvm堆(3008):内存在480016字节分配。  07-25 17:17:49.317:E / dalvikvm(3008):内存:堆大小= 65571KB,分配= 63749KB,限= 65536KB  07-25 17:17:49.317:E / dalvikvm(3008):额外的信息:足迹= 65315KB,允许的排放量= 65571KB,裁剪= 0KB  07-25 17:17:49.327:E / AndroidRuntime(3008):致命异常:AsyncTask的#1  07-25 17:17:49.327:E / AndroidRuntime(3008):java.lang.RuntimeException的:一个错误而执行doInBackground发生()  07-25 17:17:49.327:E / AndroidRuntime(3008):在android.os.AsyncTask $ 3.done(AsyncTask.java:299)  07-25 17:17:49.327:E / AndroidRuntime(3008):在java.util.concurrent.FutureTask中$ Sync.innerSetException(FutureTask.java:273)  07-25 17:17:49.327:E / AndroidRuntime(3008):在java.util.concurrent.FutureTask.setException(FutureTask.java:124)  07-25 17:17:49.327:E / AndroidRuntime(3008):在java.util.concurrent.FutureTask中$ Sync.innerRun(FutureTask.java:307)  07-25 17:17:49.327:E / AndroidRuntime(3008):在java.util.concurrent.FutureTask.run(FutureTask.java:137)  07-25 17:17:49.327:E / AndroidRuntime(3008):在android.os.AsyncTask $ SerialExecutor $ 1.运行(AsyncTask.java:230)  07-25 17:17:49.327:E / AndroidRuntime(3008):在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)  07-25 17:17:49.327:E / AndroidRuntime(3008):在java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:569)  07-25 17:17:49.327:E / AndroidRuntime(3008):在java.lang.Thread.run(Thread.java:864)  07-25 17:17:49.327:E / AndroidRuntime(3008):java.lang.OutOfMemoryError:产生的原因(堆大小= 65571KB,分配= 63749KB)  07-25 17:17:49.327:E / AndroidRuntime(3008):在android.graphics.BitmapFactory.nativeDe codeByteArray(本机方法)  07-25 17:17:49.327:E / AndroidRuntime(3008):在android.graphics.BitmapFactory.de codeByteArray(BitmapFactory.java:552)  07-25 17:17:49.327:E / AndroidRuntime(3008):在android.media.ThumbnailUtils.createThumbnailFromEXIF(ThumbnailUtils.java:515)  07-25 17:17:49.327:E / AndroidRuntime(3008):在android.media.ThumbnailUtils.createImageThumbnail(ThumbnailUtils.java:102)  07-25 17:17:49.327:E / AndroidRuntime(3008):在android.provider.MediaStore $ InternalThumbnails.getThumbnail(MediaStore.java:626)  07-25 17:17:49.327:E / AndroidRuntime(3008):在android.provider.MediaStore $图片$ Thumbnails.getThumbnail(MediaStore.java:987)  07-25 17:17:49.327:E / AndroidRuntime(3008):在com.mimi.ngsbusproject.GalleryActivity.Gallery(GalleryActivity.java:92)  07-25 17:17:49.327:E / AndroidRuntime(3008):在com.mimi.ngsbusproject.GalleryActivity.access $ 1(GalleryActivity.java:74)  07-25 17:17:49.327:E / AndroidRuntime(3008):在com.mimi.ngsbusproject.GalleryActivity $ LoadGallery.doInBackground(GalleryActivity.java:58)  07-25 17:17:49.327:E / AndroidRuntime(3008):在com.mimi.ngsbusproject.GalleryActivity $ LoadGallery.doInBackground(GalleryActivity.java:1)  07-25 17:17:49.327:E / AndroidRuntime(3008):在android.os.AsyncTask $ 2.call(AsyncTask.java:287)  07-25 17:17:49.327:E / AndroidRuntime(3008):在java.util.concurrent.FutureTask中$ Sync.innerRun(FutureTask.java:305)  07-25 17:17:49.327:E / AndroidRuntime(3008):... 5个  07-25 17:17:50.062:E /窗口管理器(3008):活动com.mimi.ngsbusproject.GalleryActivity渗漏最初此处添加窗口com.android.internal.policy.impl.PhoneWindow$DecorView@41ac90a8  07-25 17:17:50.062:E /窗口管理器(3008):android.view.WindowLeaked:活动com.mimi.ngsbusproject.GalleryActivity渗漏窗口com.android.internal.policy.impl.PhoneWindow$DecorView@41ac90a8这是原本在这里添加  07-25 17:17:50.062:E /窗口管理器(3008):在android.view.ViewRootImpl(ViewRootImpl.java:465)  07-25 17:17:50.062:E /窗口管理器(3008):在android.view.WindowManagerImpl.addView(WindowManagerImpl.java:419)  07-25 17:17:50.062:E /窗口管理器(3008):在android.view.WindowManagerImpl.addView(WindowManagerImpl.java:351)  07-25 17:17:50.062:E /窗口管理器(3008):在android.view.WindowManagerImpl $ CompatModeWrapper.addView(WindowManagerImpl.java:171)  07-25 17:17:50.062:E /窗口管理器(3008):在android.view.Window $ LocalWindowManager.addView(Window.java:558)  07-25 17:17:50.062:E /窗口管理器(3008):在android.app.Dialog.show(Dialog.java:282)  07-25 17:17:50.062:E /窗口管理器(3008):在android.app.ProgressDialog.show(ProgressDialog.java:116)  07-25 17:17:50.062:E /窗口管理器(3008):在android.app.ProgressDialog.show(ProgressDialog.java:99)  07-25 17:17:50.062:E /窗口管理器(3008):在com.mimi.ngsbusproject.GalleryActivity $ LoadGallery.on preExecute(GalleryActivity.java:51)  07-25 17:17:50.062:E /窗口管理器(3008):在android.os.AsyncTask.executeOnExecutor(AsyncTask.java:586)  07-25 17:17:50.062:E /窗口管理器(3008):在android.os.AsyncTask.execute(AsyncTask.java:534)  07-25 17:17:50.062:E /窗口管理器(3008):在com.mimi.ngsbusproject.GalleryActivity.onCreate(GalleryActivity.java:43)  07-25 17:17:50.062:E /窗口管理器(3008):在android.app.Activity.performCreate(Activity.java:5066)  07-25 17:17:50.062:E /窗口管理器(3008):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1101)  07-25 17:17:50.062:E /窗口管理器(3008):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2307)  07-25 17:17:50.062:E /窗口管理器(3008):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)  07-25 17:17:50.062:E /窗口管理器(3008):在android.app.ActivityThread.access $ 600(ActivityThread.java:151)  07-25 17:17:50.062:E /窗口管理器(3008):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1331)  07-25 17:17:50.062:E /窗口管理器(3008):在android.os.Handler.dispatchMessage(Handler.java:99)  07-25 17:17:50.062:E /窗口管理器(3008):在android.os.Looper.loop(Looper.java:155)  07-25 17:17:50.062:E /窗口管理器(3008):在android.app.ActivityThread.main(ActivityThread.java:5485)  07-25 17:17:50.062:E /窗口管理器(3008):在java.lang.reflect.Method.invokeNative(本机方法)  07-25 17:17:50.062:E /窗口管理器(3008):在java.lang.reflect.Method.invoke(Method.java:511)  07-25 17:17:50.062:E /窗口管理器(3008):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1028)  07-25 17:17:50.062:E /窗口管理器(3008):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:795)  07-25 17:17:50.062:E /窗口管理器(3008):在dalvik.system.NativeStart.main(本机方法)  07-25 17:17:50.962:E / dalvikvm堆(3008):内存在2264368字节分配。  07-25 17:17:50.967:E / dalvikvm(3008):内存:堆大小= 65571KB,分配= 63787KB,限= 65536KB  07-25 17:17:50.967:E / dalvikvm(3008):额外的信息:足迹= 65315KB,允许的排放量= 65571KB,裁剪= 0KB  07-25 17:17:50.967:E / AndroidRuntime_2_crash(3008):坠毁在同一个进程:主  07-25 17:17:50.967:E / AndroidRuntime_2_crash(3008):java.lang.OutOfMemoryError:(堆大小= 65571KB,分配= 63787KB)  07-25 17:17:50.967:E / AndroidRuntime_2_crash(3008):在android.graphics.BitmapFactory.nativeDe $ C $检测板(本机方法)  07-25 17:17:50.967:E / AndroidRuntime_2_crash(3008):在android.graphics.BitmapFactory.de codeStream(BitmapFactory.java:626)  07-25 17:17:50.967:E / AndroidRuntime_2_crash(3008):在android.graphics.BitmapFactory.de codeResourceStream(BitmapFactory.java:473)  07-25 17:17:50.967:E / AndroidRuntime_2_crash(3008):在android.graphics.BitmapFactory.de codeResource(BitmapFactory.java:502)  07-25 17:17:50.967:E / AndroidRuntime_2_crash(3008):在com.mimi.ngsbusproject.LuancherActivity.de codeSampledBitmapFromResource(LuancherActivity.java:147)  07-25 17:17:50.967:E / AndroidRuntime_2_crash(3008):在com.mimi.ngsbusproject.LuancherActivity.AnimateandSlideShow(LuancherActivity.java:113)  07-25 17:17:50.967:E / AndroidRuntime_2_crash(3008):在com.mimi.ngsbusproject.LuancherActivity.access $ 0(LuancherActivity.java:106)  07-25 17:17:50.967:E / AndroidRuntime_2_crash(3008):在com.mimi.ngsbusproject.LuancherActivity $ 2.运行(LuancherActivity.java:84)

和我的code在这里。

And My code here.

final String[] columns = { MediaStore.Images.Media.DATA,
            MediaStore.Images.Media._ID };
    Cursor image_cursor;
    image_cursor = managedQuery(
            MediaStore.Images.Media.EXTERNAL_CONTENT_URI, columns, null,
            null, null);
    int image_column_index = image_cursor
            .getColumnIndex(MediaStore.Images.Media._ID);
    count = image_cursor.getCount();
    thumbnails = new Bitmap[count];
    arrPath = new String[count];
    try {
        for (int i = 0; i < count; i++) {
            image_cursor.moveToPosition(i);
            int id = image_cursor.getInt(image_column_index);
            int dataColumnIndex = image_cursor
                    .getColumnIndex(MediaStore.Images.Media.DATA);
            thumbnails[i] = MediaStore.Images.Thumbnails.getThumbnail(
                    getApplicationContext().getContentResolver(), id,
                    MediaStore.Images.Thumbnails.MINI_KIND, null);
            arrPath[i] = image_cursor.getString(dataColumnIndex);

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

对不起,我的语言。谢谢你。

Sorry for my language. Thanks.

推荐答案

您部分:

count = image_cursor.getCount();
thumbnails = new Bitmap[count];

可能会导致此。为了创建位图的内存高效你应该使用BitmapOptions

May cause this. For creating Bitmaps memory-efficient you should use BitmapOptions

尝试:该来代替:

Bitmap bm;
bm = Bitmap.createScaledBitmap(BitmapFactory.decodeFile(filepath),100, 100, true);
mPicture = new ImageView(context);
mPicture.setImageBitmap(bm);

请参阅Strange内存不足的问题,同时加载图像为位图对象

好像这两个日志可以给你提示:

Seems like these both logs may give you the hint:

未能分配内存的缩略图  内容://媒体/外部/图像/缩略图/ 300;

android.graphics.BitmapFactory.nativeDe codeByteArray(本机方法)  07-25 17:17:49.327:E / AndroidRuntime(3008):在  android.graphics.BitmapFactory.de codeByteArray(BitmapFactory.java:552)  07-25 17:17:49.327:E / AndroidRuntime(3008):在  android.media.ThumbnailUtils.createThumbnailFromEXIF

请问您的画廊中含有大量的大图?在这种情况下,你没有你的光标问题但你的内存管理,当谈到位图!

Does your gallery contain a lot of big pictures?In this case you dont have a problem with your Cursor but with your memory management when it comes to bitmaps!

此外,你应该有这个权限在你的清单:

Furthermore you should have this permission in your manifest:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

另请参见

http://developer.android.com/training/displaying-bitmaps/load-bitmap.html

这篇关于Android的 - 内存不足的错误。当它运行在真实的设备的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-23 07:51