Android内存不足的小位图

时间:2016-07-17 08:48:01

标签: android memory memory-management bitmap

我在使用以下代码

时仅出现内存不足错误
    public class MyActivity extends Activity  {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN);
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

    // CODE FOR PUTTING BITMAP ON BACKGROUND
    String pathName = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).toString()
            + "/Backgrounds/0.png";
    Resources res = getResources();
    Bitmap bitmap = BitmapFactory.decodeFile(pathName);
    BitmapDrawable bd = new BitmapDrawable(res, bitmap);
    View view = findViewById(R.id.screen1);
    view.setBackgroundDrawable(bd);
    }

位图只有310k,并且在我的所有活动中都是相同的位图' s(10)

当快速连续地从一个活动切换到另一个活动时,往往会发生这种情况。

如何提高效率?

感谢任何帮助

标记

1 个答案:

答案 0 :(得分:0)

您的位图最有可能有多大并不重要。当你得到一个OOM意味着整个系统内存不足。举个例子,如果你有一个10MB的堆并且我分配9.999 MB然后分配100个字节,那么100个字节将抛出异常(因为那是它实际上没有内存的时候)。真正的问题是第一次分配。

使用System.gc是一个可怕的黑客攻击,实际上并没有解决你的问题 - 它只是让你最好再看到它。你有内存泄漏。你需要修复这个内存泄漏,如果不是现在最终。泄漏几乎肯定是对Activity对象的泄漏引用。回到你的应用程序,运行一些堆分析器,找出泄漏的位置。