我有一个列表视图,每行有几个图像按钮.单击列表行时,将启动新活动.由于相机布局有问题,我不得不建立自己的标签.为结果启动的活动是地图.如果我单击我的按钮启动图像预览(从SD卡加载图像),应用程序将从活动返回到活动返回到listview结果处理程序以重新启动我的新活动,这只是一个图像小部件.
列表视图上的图像预览正在使用光标和ListAdapter.这使得它非常简单,但我不确定如何放置一个经过调整大小的图像(即小的像素大小不像动态src图像按钮那样.所以我只是调整了从手机摄像头下来的图像.
问题是当我试图返回并重新启动第二个活动时,我收到内存不足错误.
这是更好的,因为我还需要对每行中的小部件/元素的属性进行一些更改,因为焦点问题我无法选择带触摸屏的行.(我可以用滚球.)
一旦我在列表视图上禁用了图像,它再次正常工作.
仅供参考:这就是我的做法:
String[] from = new String[] { DBHelper.KEY_BUSINESSNAME,DBHelper.KEY_ADDRESS,DBHelper.KEY_CITY,DBHelper.KEY_GPSLONG,DBHelper.KEY_GPSLAT,DBHelper.KEY_IMAGEFILENAME + ""};
int[] to = new int[] {R.id.businessname,R.id.address,R.id.city,R.id.gpslong,R.id.gpslat,R.id.imagefilename };
notes = new SimpleCursorAdapter(this, R.layout.notes_row, c, from, to);
setListAdapter(notes);
Run Code Online (Sandbox Code Playgroud)
哪里R.id.imagefilename是ButtonImage.
这是我的LogCat:
01-25 05:05:49.877: ERROR/dalvikvm-heap(3896): 6291456-byte external allocation too large for this process.
01-25 05:05:49.877: ERROR/(3896): VM wont let us allocate 6291456 bytes
01-25 05:05:49.877: ERROR/AndroidRuntime(3896): Uncaught handler: thread main exiting due to …Run Code Online (Sandbox Code Playgroud) 这与这个问题有关
android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)中的java.lang.OutOfMemoryError
我创建了有问题的转储文件..它提供了以下信息
One instance of "byte[]" loaded by "<system class loader>" occupies 1,10,59,216
(51.02%) bytes. The memory is accumulated in one instance of "byte[]"
loaded by "<system class loader>".
Keywords byte[]
Run Code Online (Sandbox Code Playgroud)
那么现在可以做些什么?我该如何清除问题?
我的list_objects [context] - 入站文件
CLASS NAME SHALLOW HEAP RETAINED HEAP
byte[11059200] @ 0xb4979590 | 1,10,59,216 | 1,10,59,216
mBuffer android.graphics.Bitmap @ 0xb3dc68d8 |48 | 48
mBitmap android.graphics.drawable.BitmapDrawable @ 0xb3dbba60 | 72 | 144
mBackground android.widget.RelativeLayout @ 0xb3db3fc0 |512 | 10,144
mBitmap android.graphics.drawable.BitmapDrawable$BitmapState @ 0xb3dc0068 |40 | 40 …Run Code Online (Sandbox Code Playgroud) 用该设备拍摄的照片很大。我想在将它们调整大小(缩放它们)到更合理的大小(小于 800x800)后将它们上传到我的后端服务器。我希望使用ImageEditor模块的coprImage()功能,但是使用大图像运行它会导致OutOfMemory异常。我假设由于模块尝试解码大图像并将其存储在内存中,因此应用程序崩溃了。
我需要的是以下内容:
输入
{
width: 3100,
height: 2500,
uri: content://android/1 (some location in Android device)
}
Run Code Online (Sandbox Code Playgroud)
输出
{
width: 800,
height: 650,
uri: content://android/1/resized (some location in Android device)
}
Run Code Online (Sandbox Code Playgroud)
然后我可以抓取这个 uri 将图片发送到我的后端服务器,并从设备中删除调整大小的照片。
我假设我将不得不编写一个NativeModule这样我就可以调整图像大小而无需将大的解码图像加载到内存中。React Native 的Image组件在渲染它们之前使用Fresco来处理调整大小,但我认为它没有提供一种调整图像大小并将其临时保存在 fs 中的方法。
任何帮助,将不胜感激。
参考:
我最初显示一个空视图.当我点击"添加图像"按钮时,它会在网格中显示一组图像,然后单击图像.我通过使用拖动层动态添加ImageView将视频放置在视图中.通过这种方式,我添加了更多图像.现在我想以编程方式调整每个图像的大小.可能吗?如果可能,请提供代码.