Android – 内存不足错误.当它在真实设备上运行时

我有一个图像库应用程序,我正在尝试从外部存储获取图像.我的应用程序可以在 Android模拟器上运行,但在真实设备(HTC OneX)上我有一些例外.

我的Log cat在这里.

07-25 17:17:49.027: E/dalvikvm-heap(3008): Out of memory on a 480016-byte allocation.
07-25 17:17:49.052: E/dalvikvm(3008): Out of memory: Heap Size=65571KB,Allocated=63717KB,Limit=65536KB
07-25 17:17:49.052: E/dalvikvm(3008): Extra info: Footprint=65315KB,Allowed Footprint=65571KB,Trimmed=0KB
07-25 17:17:49.052: E/MediaStore(3008): Failed to allocate memory for thumbnail content://media/external/images/thumbnails/300; java.lang.OutOfMemoryError: (Heap Size=65571KB,Allocated=63717KB)
07-25 17:17:49.142: E/dalvikvm-heap(3008): Out of memory on a 480016-byte allocation.
07-25 17:17:49.152: E/dalvikvm(3008): Out of memory: Heap Size=65571KB,Allocated=63718KB,Limit=65536KB
07-25 17:17:49.152: E/dalvikvm(3008): Extra info: Footprint=65315KB,Trimmed=0KB
07-25 17:17:49.152: E/MediaStore(3008): Failed to allocate memory for thumbnail content://media/external/images/thumbnails/300; java.lang.OutOfMemoryError: (Heap Size=65571KB,Allocated=63718KB)
07-25 17:17:49.302: E/dalvikvm-heap(3008): Out of memory on a 480016-byte allocation.
07-25 17:17:49.317: E/dalvikvm(3008): Out of memory: Heap Size=65571KB,Allocated=63749KB,Limit=65536KB
07-25 17:17:49.317: E/dalvikvm(3008): Extra info: Footprint=65315KB,Trimmed=0KB
07-25 17:17:49.327: E/AndroidRuntime(3008): FATAL EXCEPTION: AsyncTask #1
07-25 17:17:49.327: E/AndroidRuntime(3008): java.lang.RuntimeException: An error occured while executing doInBackground()
07-25 17:17:49.327: E/AndroidRuntime(3008):     at android.os.AsyncTask$3.done(AsyncTask.java:299)
07-25 17:17:49.327: E/AndroidRuntime(3008):     at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
07-25 17:17:49.327: E/AndroidRuntime(3008):     at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
07-25 17:17:49.327: E/AndroidRuntime(3008):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
07-25 17:17:49.327: E/AndroidRuntime(3008):     at java.util.concurrent.FutureTask.run(FutureTask.java:137)
07-25 17:17:49.327: E/AndroidRuntime(3008):     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
07-25 17:17:49.327: E/AndroidRuntime(3008):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
07-25 17:17:49.327: E/AndroidRuntime(3008):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
07-25 17:17:49.327: E/AndroidRuntime(3008):     at java.lang.Thread.run(Thread.java:864)
07-25 17:17:49.327: E/AndroidRuntime(3008): Caused by: java.lang.OutOfMemoryError: (Heap Size=65571KB,Allocated=63749KB)
07-25 17:17:49.327: E/AndroidRuntime(3008):     at android.graphics.BitmapFactory.nativeDecodeByteArray(Native Method)
07-25 17:17:49.327: E/AndroidRuntime(3008):     at android.graphics.BitmapFactory.decodeByteArray(BitmapFactory.java:552)
07-25 17:17:49.327: E/AndroidRuntime(3008):     at android.media.ThumbnailUtils.createThumbnailFromEXIF(ThumbnailUtils.java:515)
07-25 17:17:49.327: E/AndroidRuntime(3008):     at android.media.ThumbnailUtils.createImageThumbnail(ThumbnailUtils.java:102)
07-25 17:17:49.327: E/AndroidRuntime(3008):     at android.provider.MediaStore$InternalThumbnails.getThumbnail(MediaStore.java:626)
07-25 17:17:49.327: E/AndroidRuntime(3008):     at android.provider.MediaStore$Images$Thumbnails.getThumbnail(MediaStore.java:987)
07-25 17:17:49.327: E/AndroidRuntime(3008):     at com.mimi.ngsbusproject.galleryActivity.gallery(galleryActivity.java:92)
07-25 17:17:49.327: E/AndroidRuntime(3008):     at com.mimi.ngsbusproject.galleryActivity.access$1(galleryActivity.java:74)
07-25 17:17:49.327: E/AndroidRuntime(3008):     at com.mimi.ngsbusproject.galleryActivity$Loadgallery.doInBackground(galleryActivity.java:58)
07-25 17:17:49.327: E/AndroidRuntime(3008):     at com.mimi.ngsbusproject.galleryActivity$Loadgallery.doInBackground(galleryActivity.java:1)
07-25 17:17:49.327: E/AndroidRuntime(3008):     at android.os.AsyncTask$2.call(AsyncTask.java:287)
07-25 17:17:49.327: E/AndroidRuntime(3008):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
07-25 17:17:49.327: E/AndroidRuntime(3008):     ... 5 more
07-25 17:17:50.062: E/WindowManager(3008): Activity com.mimi.ngsbusproject.galleryActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@41ac90a8 that was originally added here
07-25 17:17:50.062: E/WindowManager(3008): android.view.WindowLeaked: Activity com.mimi.ngsbusproject.galleryActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@41ac90a8 that was originally added here
07-25 17:17:50.062: E/WindowManager(3008):  at android.view.ViewRootImpl.<init>(ViewRootImpl.java:465)
07-25 17:17:50.062: E/WindowManager(3008):  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:419)
07-25 17:17:50.062: E/WindowManager(3008):  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:351)
07-25 17:17:50.062: E/WindowManager(3008):  at android.view.WindowManagerImpl$CompatModeWrapper.addView(WindowManagerImpl.java:171)
07-25 17:17:50.062: E/WindowManager(3008):  at android.view.Window$LocalWindowManager.addView(Window.java:558)
07-25 17:17:50.062: E/WindowManager(3008):  at android.app.Dialog.show(Dialog.java:282)
07-25 17:17:50.062: E/WindowManager(3008):  at android.app.ProgressDialog.show(ProgressDialog.java:116)
07-25 17:17:50.062: E/WindowManager(3008):  at android.app.ProgressDialog.show(ProgressDialog.java:99)
07-25 17:17:50.062: E/WindowManager(3008):  at com.mimi.ngsbusproject.galleryActivity$Loadgallery.onPreExecute(galleryActivity.java:51)
07-25 17:17:50.062: E/WindowManager(3008):  at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:586)
07-25 17:17:50.062: E/WindowManager(3008):  at android.os.AsyncTask.execute(AsyncTask.java:534)
07-25 17:17:50.062: E/WindowManager(3008):  at com.mimi.ngsbusproject.galleryActivity.onCreate(galleryActivity.java:43)
07-25 17:17:50.062: E/WindowManager(3008):  at android.app.Activity.performCreate(Activity.java:5066)
07-25 17:17:50.062: E/WindowManager(3008):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1101)
07-25 17:17:50.062: E/WindowManager(3008):  at android.app.ActivityThread.performlaunchActivity(ActivityThread.java:2307)
07-25 17:17:50.062: E/WindowManager(3008):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
07-25 17:17:50.062: E/WindowManager(3008):  at android.app.ActivityThread.access$600(ActivityThread.java:151)
07-25 17:17:50.062: E/WindowManager(3008):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1331)
07-25 17:17:50.062: E/WindowManager(3008):  at android.os.Handler.dispatchMessage(Handler.java:99)
07-25 17:17:50.062: E/WindowManager(3008):  at android.os.Looper.loop(Looper.java:155)
07-25 17:17:50.062: E/WindowManager(3008):  at android.app.ActivityThread.main(ActivityThread.java:5485)
07-25 17:17:50.062: E/WindowManager(3008):  at java.lang.reflect.Method.invokeNative(Native Method)
07-25 17:17:50.062: E/WindowManager(3008):  at java.lang.reflect.Method.invoke(Method.java:511)
07-25 17:17:50.062: E/WindowManager(3008):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1028)
07-25 17:17:50.062: E/WindowManager(3008):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:795)
07-25 17:17:50.062: E/WindowManager(3008):  at dalvik.system.NativeStart.main(Native Method)
07-25 17:17:50.962: E/dalvikvm-heap(3008): Out of memory on a 2264368-byte allocation.
07-25 17:17:50.967: E/dalvikvm(3008): Out of memory: Heap Size=65571KB,Allocated=63787KB,Limit=65536KB
07-25 17:17:50.967: E/dalvikvm(3008): Extra info: Footprint=65315KB,Trimmed=0KB
07-25 17:17:50.967: E/AndroidRuntime_2_crash(3008): crash in the same process: main
07-25 17:17:50.967: E/AndroidRuntime_2_crash(3008): java.lang.OutOfMemoryError: (Heap Size=65571KB,Allocated=63787KB)
07-25 17:17:50.967: E/AndroidRuntime_2_crash(3008):     at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
07-25 17:17:50.967: E/AndroidRuntime_2_crash(3008):     at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:626)
07-25 17:17:50.967: E/AndroidRuntime_2_crash(3008):     at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:473)
07-25 17:17:50.967: E/AndroidRuntime_2_crash(3008):     at android.graphics.BitmapFactory.decodeResource(BitmapFactory.java:502)
07-25 17:17:50.967: E/AndroidRuntime_2_crash(3008):     at com.mimi.ngsbusproject.LuancherActivity.decodeSampledBitmapFromresource(LuancherActivity.java:147)
07-25 17:17:50.967: E/AndroidRuntime_2_crash(3008):     at com.mimi.ngsbusproject.LuancherActivity.AnimateandSlideShow(LuancherActivity.java:113)
07-25 17:17:50.967: E/AndroidRuntime_2_crash(3008):     at com.mimi.ngsbusproject.LuancherActivity.access$0(LuancherActivity.java:106)
07-25 17:17:50.967: E/AndroidRuntime_2_crash(3008):     at com.mimi.ngsbusproject.LuancherActivity$2.run(LuancherActivity.java:84)

我的代码在这里.

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);
    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();
    }

抱歉我的语言.谢谢.

解决方法

你的部分:
count = image_cursor.getCount();
thumbnails = new Bitmap[count];

可能导致这个.要创建位图内存效率,您应该使用BitmapOptions

试试这个:

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

看到
Strange out of memory issue while loading an image to a Bitmap object

看起来这两个日志可能会给你提示

Failed to allocate memory for thumbnail
content://media/external/images/thumbnails/300;

.

android.graphics.BitmapFactory.nativeDecodeByteArray(Native Method)
07-25 17:17:49.327: E/AndroidRuntime(3008): at
android.graphics.BitmapFactory.decodeByteArray(BitmapFactory.java:552)
07-25 17:17:49.327: E/AndroidRuntime(3008): at
android.media.ThumbnailUtils.createThumbnailFromEXIF

你的画廊是否包含很多大图片
在这种情况下,您的Cursor没有问题,但在位图方面您的内存管理问题!

此外,您应该在清单中拥有此权限:

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

也可以看看

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


这篇“android轻量级无侵入式管理数据库自动升级组件怎么实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定...
今天小编给大家分享一下Android实现自定义圆形进度条的常用方法有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文...
这篇文章主要讲解了“Android如何解决字符对齐问题”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Android...
这篇文章主要介绍“Android岛屿数量算法怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Android岛屿数量算...
本篇内容主要讲解“Android如何开发MQTT协议的模型及通信”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Andro...
本文小编为大家详细介绍“Android数据压缩的方法是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“Android数据压缩的方法是什么”文章能帮助大家解决疑惑...
这篇“Android怎么使用Intent传大数据”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅...
本文小编为大家详细介绍“Android事件冲突怎么解决悬浮窗拖拽问题”,内容详细,步骤清晰,细节处理妥当,希望这篇“Android事件冲突怎么解决悬浮窗拖拽问题”文...
这篇文章主要介绍了Android拼接如何实现动态对象的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Android拼接如何实现动态对象文...
今天小编给大家分享一下Android全面屏适配怎么实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下...
本篇内容介绍了“Android怎么开发Input系统触摸事件分发”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何...
今天小编给大家分享一下AndroidRoom怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下...
本文小编为大家详细介绍“AndroidRoom使用方法有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“AndroidRoom使用方法有哪些”文章能帮助大家...
这篇文章主要介绍“Android中的OpenGL怎么配置使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Android中的Open...
这篇文章主要介绍了Android如何自定义自动识别涂鸦工具类的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Android如何自定义自动...
今天小编给大家分享一下Android如何自定义有限制区域的图例角度自识别涂鸦工具类的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以...
今天小编给大家分享一下ReactNative错误采集原理在Android中如何实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章...
这篇文章主要讲解了“Android崩溃日志收集和保存代码分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“A...
这篇“Android面向单Activity开发实例分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大...
本篇内容介绍了“Android应用启动白屏处理的方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何...