我有一个列表视图,每行有几个图像按钮.单击列表行时,将启动新活动.由于相机布局有问题,我不得不建立自己的标签.为结果启动的活动是地图.如果我单击我的按钮启动图像预览(从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) 我有一堆图片网址.我必须下载这些图像并逐个显示在我的应用程序中.我正在使用SoftReferences和使用Sdcard 保存集合中的图像,以避免重新获取并改善用户体验.
问题是我对位图的大小一无所知.事实证明,当我使用BitmapFactory.decodeStream(InputStream)方法时,偶尔会出现OutOfMemoryExceptions .因此,我选择使用BitmapFactory Options(样本大小= 2)对图像进行下采样.这提供了更好的输出:没有OOM,但这会影响较小图像的质量.
我该如何处理这类案件?有没有办法选择性地仅对高分辨率图像进行下采样?
当我更改为横向模式时,使用全屏位图创建的对象很少.
当我滚动另一个对象被调用并且它的位图被显示时,当我反复这样做,位图大小超过vm预算错误时,我已经做了所有的事情,比如recycle()设置null然后调用GC(),我仍然有同样的错误.创建位图....
bitmap = Bitmap.createBitmap(ChartProperties.getChartWidth(),
ChartProperties.getChartHeight(),
Bitmap.Config.RGB_565);
imageCache.put(String.valueOf(LandscapeChartActivity.getActiveFeature()),
new SoftReference(bitmap));
if(imageCache != null){
for (int i = 0; i < imageCache.size(); i++) {
if (imageCache.get(String.valueOf(i)) != null) {
imageCache.get(String.valueOf(i)).get().recycle();
imageCache.put(String.valueOf(i), null);
}
}
Runtime.getRuntime().gc();
imageCache.clear();
imageCache = null;
Run Code Online (Sandbox Code Playgroud) 我正在编写一个程序,该程序使用图库中的图像,然后在活动中显示它们(一个图像与活动)。然而,我连续三天一遍又一遍地遇到这个错误,却没有任何消除它的进展:
07-25 11:43:36.197: ERROR/AndroidRuntime(346): java.lang.OutOfMemoryError: bitmap size exceeds VM budget
Run Code Online (Sandbox Code Playgroud)
我的代码流程如下:
当用户按下按钮时,会触发一个意图,通向图库:
Intent galleryIntent = new Intent(Intent.ACTION_GET_CONTENT);
galleryIntent.setType("image/*");
startActivityForResult(galleryIntent, 0);
Run Code Online (Sandbox Code Playgroud)
一旦用户选择了图像,图像就会显示在图像视图中:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<ImageView
android:background="#ffffffff"
android:id="@+id/image"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_gravity="center"
android:maxWidth="250dip"
android:maxHeight="250dip"
android:adjustViewBounds="true"/>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
在 onActivityResult 方法中我有:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(resultCode == RESULT_OK) {
switch(requestCode) {
case 0: // Gallery
String realPath = getRealPathFromURI(data.getData());
File imgFile = new File(realPath);
Bitmap myBitmap;
try {
myBitmap = decodeFile(imgFile); …Run Code Online (Sandbox Code Playgroud) 这不是Android开发者控制台中神秘堆栈跟踪的重复(位图大小超过32位)
这个问题没有提供单行代码,也没有答案; 此外,即使我将位图大小设置为32x32,我也会收到此错误,它是唯一的Bitmap,因此它与内存无关.
我想做的事
所述Log.e用于ImageView的大小,因此位图输出为:
Width: 272
Height: 136
Run Code Online (Sandbox Code Playgroud)
怎么了
以下代码适用于Nexus4,Nexus7和Desire HD(CM10),但在模拟器上运行应用程序会给出如下所示的错误(API 8).
发现
我尝试过它的一半大小和32x32,这给出了同样的错误.
我在DialogFragment中显示ImageView(针对API 8的ActionBarSherlock/HoloEveryWhere),也许这就是罪魁祸首?
ImageView的:
<ImageView
android:id="@+id/imageView1"
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_marginBottom="12dp"
android:layout_marginTop="12dp" />
Run Code Online (Sandbox Code Playgroud)
在我的活动中:
iv = (ImageView) view.findViewById(R.id.imageView1);
ViewTreeObserver vto = iv.getViewTreeObserver();
vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
@Override
public boolean onPreDraw() {
if (!waveFormMeasured) {
if (iv.getMeasuredWidth() > 1) {
width = iv.getMeasuredWidth();
Log.e(TAG, "Width: " + width + " Height: " + width / 2);
waveBitmap = Bitmap.createBitmap((int) width, …Run Code Online (Sandbox Code Playgroud) 我开发了一个用于读书的Android应用程序.Book页面和音频从Amazon Bucket下载.下载后,它存储在SD卡上.
我为下一页和上一页放置了两个按钮.当我显示页面它给了我内存异常.
11-03 10:59:39.199: E/AndroidRuntime(13566): FATAL EXCEPTION: main
11-03 10:59:39.199: E/AndroidRuntime(13566): java.lang.OutOfMemoryError
11-03 10:59:39.199: E/AndroidRuntime(13566): at android.graphics.BitmapFactory.nativeDecodeStream(Native Method)
11-03 10:59:39.199: E/AndroidRuntime(13566): at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:493)
11-03 10:59:39.199: E/AndroidRuntime(13566): at android.graphics.BitmapFactory.decodeFile(BitmapFactory.java:299)
11-03 10:59:39.199: E/AndroidRuntime(13566): at android.graphics.BitmapFactory.decodeFile(BitmapFactory.java:324)
11-03 10:59:39.199: E/AndroidRuntime(13566): at android.graphics.drawable.Drawable.createFromPath(Drawable.java:880)
11-03 10:59:39.199: E/AndroidRuntime(13566): at org.Infoware.childrenbible.GeneralHelper.setImgfromSDCard(GeneralHelper.java:608)
11-03 10:59:39.199: E/AndroidRuntime(13566): at org.Infoware.childrenbible.CoverPageActivity.onCreate(CoverPageActivity.java:205)
11-03 10:59:39.199: E/AndroidRuntime(13566): at android.app.Activity.performCreate(Activity.java:4465)
11-03 10:59:39.199: E/AndroidRuntime(13566): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
11-03 10:59:39.199: E/AndroidRuntime(13566): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
11-03 10:59:39.199: E/AndroidRuntime(13566): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
11-03 10:59:39.199: E/AndroidRuntime(13566): at android.app.ActivityThread.access$600(ActivityThread.java:123)
11-03 10:59:39.199: E/AndroidRuntime(13566): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
11-03 …Run Code Online (Sandbox Code Playgroud) 我是android的新手,并尝试使用Bitmap和BitmapFactory将SDcard图像放入网格视图中.但它会导致错误:
ERROR/AndroidRuntime(6137): java.lang.OutOfMemoryError: bitmap size exceeds VM budget
ERROR/AndroidRuntime(6137): at android.graphics.BitmapFactory.nativeDecodeStream(Native Method)
ERROR/AndroidRuntime(6137): at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:459)
ERROR/AndroidRuntime(6137): at android.graphics.BitmapFactory.decodeFile(BitmapFactory.java:271)
Run Code Online (Sandbox Code Playgroud)