当我必须在Android中使用大量图标时如何管理内存?

时间:2015-10-23 15:13:55

标签: java android arraylist drawable android-memory

我正在开发一款应用。我在drawable-hdpi文件夹中有1200多个图标。每一秒我都会拿起一个我需要展示的图标。所有图标均为48*48像素,格式为.png。他们总共占用774 KB个空间。我正在运行Service,从那里我每秒都会选择一个图标。在那onCreate() Service drawable中我以这种方式存储speed = new ArrayList<Integer>(); speed.add(R.drawable.image000); speed.add(R.drawable.image001); speed.add(R.drawable.image002); //...and so on ID:

nm.notify(1, builder.setContentTitle("up: " + s + " down: " + s2)
            .setContentText(g)
            .setSmallIcon(speed.get(xValue + yValue))
            .setContentIntent(contentIntent)
            .setPriority(128)
            .build());

我的应用程序非常简单。它添加了一些数字,并从相应的arraylist的房间中取出图标并将其显示在通知状态栏中。像:

(Arround 105-120 MB)

现在问题是,我的应用程序占用了太多内存Bitmap。我没有使用任何Service。即使我在public void freeMemory() { System.runFinalization(); Runtime.getRuntime().gc(); System.gc(); } 中每秒都调用此方法:

@Override
    public void onBackPressed() {
        super.onBackPressed();
        this.finish();
    }

并添加了此代码:

Imports System.IO 

在每项活动中。为什么这么多记忆呢?我是以错误的方式存储这些图标吗?我现在该怎么办?

1 个答案:

答案 0 :(得分:0)

对于有效的尺寸,您有2个选项可以在线上传图像,然后从那里上传,因为现在每个人都在智能手机上使用互联网,因此从网络上拍摄图像并不是一个坏主意,以节省大量的保存(以MB为单位) )。

String imageUri = "http://example.com/myimage.png"; // from Web

OR

第二个选项是在安装应用程序后上传SD卡上的文件,然后从SD卡中取出文件。两种选择都很有效。选择你所在的大陆。

String imageUri = "file:///mnt/sdcard/myimage.png"; // from SD card