我的应用程序所做的只是从sdcard
获取图片并在listview
中显示。当我从sdcard
中选择图像时,它会在listview
中正确显示,但是当我从sdcard
第二次选择相同的图像时,应用程序崩溃了。我想要的,如果第二次选择相同的图像,它应该给图像已经存在的吐司。谢谢你的帮助
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Uri selectedImage = data.getData();
String[] filePathColumn = { MediaStore.Images.Media.DATA };
Cursor cursor = getContentResolver().query(selectedImage,
filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String picturePath = cursor.getString(columnIndex);
Bitmap image=(BitmapFactory.decodeFile(picturePath));
addattachmentsToListView(image);
cursor.close();
}
这里是logcat
10-16 00:53:34.432: E/dalvikvm-heap(5905): Out of memory on a 24023056-byte allocation.
10-16 00:53:34.462: E/dalvikvm(5905): Out of memory: Heap Size=61575KB, Allocated=43470KB, Limit=65536KB
10-16 00:53:34.462: E/dalvikvm(5905): Extra info: Footprint=61575KB, Allowed Footprint=61575KB, Trimmed=0KB
10-16 00:53:34.462: E/AndroidRuntime(5905): FATAL EXCEPTION: main
10-16 00:53:34.462: E/AndroidRuntime(5905): java.lang.OutOfMemoryError: (Heap Size=61575KB, Allocated=43470KB)
10-16 00:53:34.462: E/AndroidRuntime(5905): at android.graphics.BitmapFactory.nativeDecodeStream(Native Method)
10-16 00:53:34.462: E/AndroidRuntime(5905): at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:658)
10-16 00:53:34.462: E/AndroidRuntime(5905): at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:730)
10-16 00:53:34.462: E/AndroidRuntime(5905): at com.example.androidufoneapp.CustomerRegistrationL0.onActivityResult(CustomerRegistrationL0.java:257)
10-16 00:53:34.462: E/AndroidRuntime(5905): at android.app.Activity.dispatchActivityResult(Activity.java:5275)
10-16 00:53:34.462: E/AndroidRuntime(5905): at android.app.ActivityThread.deliverResults(ActivityThread.java:3618)
10-16 00:53:34.462: E/AndroidRuntime(5905): at android.app.ActivityThread.handleSendResult(ActivityThread.java:3672)
10-16 00:53:34.462: E/AndroidRuntime(5905): at android.app.ActivityThread.access$1100(ActivityThread.java:151)
10-16 00:53:34.462: E/AndroidRuntime(5905): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1379)
10-16 00:53:34.462: E/AndroidRuntime(5905): at android.os.Handler.dispatchMessage(Handler.java:99)
10-16 00:53:34.462: E/AndroidRuntime(5905): at android.os.Looper.loop(Looper.java:155)
10-16 00:53:34.462: E/AndroidRuntime(5905): at android.app.ActivityThread.main(ActivityThread.java:5454)
10-16 00:53:34.462: E/AndroidRuntime(5905): at java.lang.reflect.Method.invokeNative(Native Method)
10-16 00:53:34.462: E/AndroidRuntime(5905): at java.lang.reflect.Method.invoke(Method.java:511)
10-16 00:53:34.462: E/AndroidRuntime(5905): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1029)
10-16 00:53:34.462: E/AndroidRuntime(5905): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:796)
10-16 00:53:34.462: E/AndroidRuntime(5905): at dalvik.system.NativeStart.main(Native Method)
10-16 00:55:50.447: E/Trace(6372): error opening trace file: No such file or directory (2)
10-16 00:56:08.376: E/dalvikvm-heap(6372): Out of memory on a 24023056-byte allocation.
10-16 00:56:08.376: E/dalvikvm(6372): Out of memory: Heap Size=63559KB, Allocated=44806KB, Limit=65536KB
10-16 00:56:08.376: E/dalvikvm(6372): Extra info: Footprint=63559KB, Allowed Footprint=63559KB, Trimmed=0KB
10-16 00:56:08.386: E/AndroidRuntime(6372): FATAL EXCEPTION: main
10-16 00:56:08.386: E/AndroidRuntime(6372): java.lang.OutOfMemoryError: (Heap Size=63559KB, Allocated=44806KB)
10-16 00:56:08.386: E/AndroidRuntime(6372): at android.graphics.BitmapFactory.nativeDecodeStream(Native Method)
10-16 00:56:08.386: E/AndroidRuntime(6372): at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:658)
10-16 00:56:08.386: E/AndroidRuntime(6372): at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:730)
10-16 00:56:08.386: E/AndroidRuntime(6372): at com.example.androidufoneapp.CustomerRegistrationL0.onActivityResult(CustomerRegistrationL0.java:257)
10-16 00:56:08.386: E/AndroidRuntime(6372): at android.app.Activity.dispatchActivityResult(Activity.java:5275)
10-16 00:56:08.386: E/AndroidRuntime(6372): at android.app.ActivityThread.deliverResults(ActivityThread.java:3618)
10-16 00:56:08.386: E/AndroidRuntime(6372): at android.app.ActivityThread.handleSendResult(ActivityThread.java:3672)
10-16 00:56:08.386: E/AndroidRuntime(6372): at android.app.ActivityThread.access$1100(ActivityThread.java:151)
10-16 00:56:08.386: E/AndroidRuntime(6372): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1379)
10-16 00:56:08.386: E/AndroidRuntime(6372): at android.os.Handler.dispatchMessage(Handler.java:99)
10-16 00:56:08.386: E/AndroidRuntime(6372): at android.os.Looper.loop(Looper.java:155)
10-16 00:56:08.386: E/AndroidRuntime(6372): at android.app.ActivityThread.main(ActivityThread.java:5454)
10-16 00:56:08.386: E/AndroidRuntime(6372): at java.lang.reflect.Method.invokeNative(Native Method)
10-16 00:56:08.386: E/AndroidRuntime(6372): at java.lang.reflect.Method.invoke(Method.java:511)
10-16 00:56:08.386: E/AndroidRuntime(6372): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1029)
10-16 00:56:08.386: E/AndroidRuntime(6372): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:796)
10-16 00:56:08.386: E/AndroidRuntime(6372): at dalvik.system.NativeStart.main(Native Method)
答案 0 :(得分:0)
您需要做的是确保您没有持有Bitmap,并且您正在加载的任何Bitmap不会消耗比您当前拥有的内存更多的内存。这些论坛中有许多资源可供使用,这在Android中有所涉及。
在这一点上,如果他们开始包含内置资源来检索包含这些检查的图像(使用方法中的标记或其他东西),那将是很好的。这个问题无处不在。
此外,您可以使用WeakReference来保存位图以确保它已被释放。如果你想确定你以后烤面包,那么你需要跟踪图像的名称或沿着这些线的东西;数据库或本地内存,用于临时解决方案,如果这是您正在寻找的。 p>