问题描述
我有一个图片库的应用程序,而我试图从外部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的 - 内存不足的错误。当它运行在真实的设备的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!