- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我制作了一个 ViewPager
来显示图像。当我前进一些页面时,我得到一个 java.lang.OutOfMemoryError: bitmap size exceeds VM budget
错误。
关于这个问题还有更多问题,但我没有找到解决方案(BitMap.Recycle
、System.gc()
等)。如果您有任何建议或解决方案,请告诉我!
PNG 为 628KB、478KB、587KB、132KB、139KB、149KB、585KB(崩溃)。
如果您有其他解决方案(像页面一样滚动图像)让我知道!
我的代码:
package nl.ipear.vngmagazine;
import android.content.Context;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Environment;
import android.os.Parcelable;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;
public class ShowMagazine2 extends FragmentActivity {
private ViewPager myPager;
private MyPagerAdapter myPagerAdapter;
private static int NUM_PAGES = 15;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.showmagazine);
myPager = (ViewPager)findViewById(R.id.viewpager1);
myPagerAdapter = new MyPagerAdapter();
myPager.setAdapter(myPagerAdapter);
return;
}
private class MyPagerAdapter extends PagerAdapter{
@Override
public int getCount() {
return NUM_PAGES;
}
@Override
public Object instantiateItem(View collection, int position) {
String location = Environment.getExternalStorageDirectory() + "/MYData/" + "2012-02/";
// Inflate and create the view
LayoutInflater layoutInflater = (LayoutInflater) collection.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = layoutInflater.inflate(R.layout.magazinepageview, null);
ImageView imageView = (ImageView) view.findViewById(R.id.magazinePageImage);
String fileName = String.format("%s%s%02d%s", location, "2012-02_Page_", position + 1, ".png");
Log.v("PNG", fileName);
imageView.setImageBitmap(BitmapFactory.decodeFile(fileName));
((ViewPager) collection).addView(view,0);
return view;
}
@Override
public void destroyItem(View collection, int position, Object view) {
((ViewPager) collection).removeView((View) view);
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view==((View)object);
}
@Override
public void finishUpdate(View arg0) {}
@Override
public void restoreState(Parcelable arg0, ClassLoader arg1) {}
@Override
public Parcelable saveState() {
return null;
}
@Override
public void startUpdate(View arg0) {}
}
}
最佳答案
看起来您的 ViewPager 正在加载位图中,但在您滚动浏览时不会释放任何位图。
我建议您限制当前可查看页面任一侧可用的页面数量,这将允许系统清理其他页面中的位图。
确保在您的 Activity/Fragment 被销毁时回收位图以帮助解决 OOM 问题。
关于android - 带有 ImageView 的 ViewPager 给出 "java.lang.OutOfMemoryError: bitmap size exceeds VM budget",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9772147/
我有一个 Node.JS 自动化,它使用 Puppeteer 并在过程中加载一些 URL。我的代码非常基本,仅使用包文档中记录的非常基本的函数。 自动化计划每 15 分钟使用 crontab 运行一次
我尝试阅读 stackoveflow 上回答的一些问题并根据此更改 eclipse.ini: 现在,除了一个应用程序之外,每个应用程序都可以正常运行。它显示此消息: 无法执行 dex:超出 GC 开销
问题描述: Task A. Amount of subtractions You have an array a length n. There are m queries (li,ri), for
编辑:看起来问题是过度使用#includes 创建圈子。我确保只包括那些需要的,它解决了前两个错误。 但是,我仍然为 BUtton 和 Elevator 得到“指定的多个默认构造函数” 每个错误都有两
在CloudKit中,我尝试通过批处理来保存大量的记录。但是,我的应用程序因以下错误而崩溃: Error pushing local data: 这是我的代码: CKModifyRecordsOpe
我正在尝试使用以下代码将 BigQuery 数据集从 Google Cloud Platform 下载到 R 工作区以对其进行分析: library(bigrquery) library(DBI) l
在 Kubernetes 中 Kubernetes Health Check Probes ,如果 timeoutSeconds 超过 periodSeconds 会怎样?例如: initialDel
我们正在使用 youtube 数据 api v3,并且已经有一段时间没有任何问题了。最近,我们收到了这个 403 异常: The request cannot be completed because
我正在将一个项目从gradle版本3.3转换为4.10.1。该项目主要是使用自定义构建步骤构建的C++代码,而不是CMake(externalNativeBuild)或Android.mk(ndkBu
这是我为查找小于或等于给定编号的跳跃数而编写的代码。它显示错误“超出输出限制” int main() { int t; cin>>t; while(t--) { long long int n
我正在尝试使用 Google Translate REST API 并同时请求以下网址: http://ajax.googleapis.com/ajax/services/language/trans
大多数时候,作为 .Net 开发人员,我们可以自由地在高级抽象世界中玩耍,但有时现实会踢你的私密部分,并告诉你要找到一个真的理解。 我刚刚经历过其中一次。我认为将角落数据列为项目列表就足够了,以便您了
我编写了一个更新函数,但是多次执行将产生错误context deadline exceeded。 我的功能: func Update(link string, m bson.M) { conf
我在我的网络服务器上同时使用 mysql 和 asp.net。我还使用 sqlite 数据库以便能够在另一台设备上使用该数据库。我需要在两个数据库之间发送数据。这是一天需要做很多次的事情。这是我如何做
我在我的应用程序中使用 Google TextToSpeech 已经很长时间了,我的许多用户都在使用离线语音,所以我对使用的资源数量没有任何问题。但是在收到 GoogleTTS 的最新更新后,我所有的
我正在尝试从 MySQL 5.0.45 数据库中删除几行: delete from bundle_inclusions; 客户端工作了一段时间,然后返回错误: Lock wait timeout ex
我试图将一个 ~200G 的文件加载到具有 4 个数据节点的 MySQL 集群中,我的目标表的 DDL 是这样的: CREATE TABLE XXXXXX ( ID BIGINT AUTO
我有这个脚本: def number_of_occurences(c, message): position = message.find(c) if position == -1:
我正在尝试对我的应用程序进行单元测试,但大部分测试都失败了,原因是异步等待失败:超过 30 秒的超时时间,未满足预期:“Home Code”。 我不知道为什么会这样失败,但这是我下面的代码 class
我的 HTML 表单是这样的 但是,当我上传一个 3mb 的文件时,它给出错误: Problem: File exceeded max_file_size" 最佳答案 我最后检查过,MAX_FIL
我是一名优秀的程序员,十分优秀!