android - 通过调用新的 Activity,位图大小超出 VM 预算

标签 android

嗨,让我们说一下当我将 Activity A 调用到 Activity B 时

下面是我的代码

     Intent i = new Intent(TemplateList.this, PictureEditor.class);
     Bundle b = new Bundle();
     b.putString("Key", "2");
     b.putString("Index", imagepathString);
     i.putExtras(b);
     v.getContext().startActivity(i);
     System.gc();
     Runtime.getRuntime().gc();
     finish();

因为在 Activity A 中加载了很多对象(很多图像),所以我通过 System.gc() 清除所有对象; Runtime.getRuntime().gc(); 将被清除并销毁 Activity ,因此不会保留任何对象的分配:)

并且从 Activity B 我要调用 Activity A

        btnTemplate.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            startActivity(new Intent(PictureEditor.this, TemplateList.class));
            dg.dismiss();
            if (bmp != null) {
                bmp.recycle();
                bmp = null;
            }
            System.gc();
            Runtime.getRuntime().gc();
            finish();
        }
    });

//这里我还调用System.gcRuntime.getRuntime.gc并销毁 Activity ,但不知道为什么如果activity A开始比我得到的

以下错误

     12-19 12:44:48.769: E/AndroidRuntime(7539): java.lang.OutOfMemoryError: bitmap size exceeds VM budget
     12-19 12:44:48.769: E/AndroidRuntime(7539):    at android.graphics.BitmapFactory.nativeDecodeByteArray(Native Method)
     12-19 12:44:48.769: E/AndroidRuntime(7539):    at android.graphics.BitmapFactory.decodeByteArray(BitmapFactory.java:405)
     12-19 12:44:48.769: E/AndroidRuntime(7539):    at android.graphics.BitmapFactory.decodeByteArray(BitmapFactory.java:418)
     12-19 12:44:48.769: E/AndroidRuntime(7539):    at com.redwood.PictureEditor.get_bitmap(PictureEditor.java:257)
     12-19 12:44:48.769: E/AndroidRuntime(7539):    at com.redwood.PictureEditor$5.run(PictureEditor.java:218)
     12-19 12:44:48.769: E/AndroidRuntime(7539):    at java.lang.Thread.run(Thread.java:1019)

任何人都可以解决我的问题吗:(

最佳答案

调用这些方法是行不通的,这些方法只是对 GC 说“如果你愿意,现在就可以运行”。

基本上寻找这些问题:

  • 位图是不是太大了? -> 将其重新调整为应用中所需的最小大小。
  • 您是否复制了太多位图?
  • 您不是通过泄漏 Activity B 的上下文来泄漏位图吗?

它可能来自很多地方,但我会首先尝试将其缩小到应用程序中所需的最小大小。

关于android - 通过调用新的 Activity,位图大小超出 VM 预算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13947533/

相关文章:

java - 使用微调器操作 URL

java - 软件设计: one object available from all classes?

java - 使用同步块(synchronized block)等待结果会导致应用程序卡住

android - Kotlin 如何从包含特定 ID 的列表中返回一个 SINGLE 对象?

android - Xamarin 无法创建 Intent

android - 如何知道传入电子邮件的消息 ID 以获取消息内容

android - setContentSize 在 cocos2dx3.0 中不起作用

android - 如何注册 OMX 内核以添加新的解码器

Android - SaxParser 错误 : ParseException: At line 1, 第 0 列:格式不正确(无效 token )

Android 创建带有图像圆顶角的 Drawable XML