概括一下的说,在一个Activity类中定义了两个静态变量,一个是自定义的适配器adapter,一个是这个adapter要用到的
数据list,其中有一点是,在构造这个adapter的时候,把这个activity的引用传给了它,这样做的是为了避免旋屏时重新
去加载adapter需要的list(获取这个数据是一个耗时的操作,旋屏会重新调用activity的onCreate方法,使用静态就当是
一个存储数据的方法,避免旋屏之后要过了一段时间才能显示gridView的内容),但是使用这个方法出现了一个问题,就是
连续旋屏多次之后,程序会因为出现OOM而终止,报的错如下:10-12 20:02:23.464: ERROR/AndroidRuntime(3682):     at android.graphics.BitmapFactory.decodeResource(BitmapFactory.java:349)找到在程序中报错的位置是:setContentView(R.layout.***);
通过MAT(内存分析工具)发现,每旋一次屏,这个静态的adapter的Ref. Objects的数量就会加1,
现在就是不知道到底是什么引起的这个OOM,代码中有去多次获取bitmap,但是报错的位置又没有指向
获取bitmap的位置,乱七八糟的讲了一堆,不知道各位看官是否晕了~

解决方案 »

  1.   

    为什么切屏时需要不断掉用onCreate方法呢? 横屏和竖屏的UI不一样吗?
    如果UI不需要变化就不用一直调用onCreate方法呀。在manifest中对应activity加入android:configChanges="keyboardHidden|orientation"
      

  2.   

    OOM是神马 , 小白求教。哈哈
      

  3.   

    甭管是什么变量,吃了过多内存,就会出现OOM
      

  4.   

    bitmap 取了之后没有回收? bitmap取了超过8M就会报00M
      

  5.   

    看你的等级都比我高,还以为你是看玩笑在问呢,OOM相信有过android
    编程的应该都不陌生,所以
      

  6.   

    楼主出现 静态的adapter的Ref. Objects可能因为在onCreate中增加了对adapter的引用,而在activity的restart过程中没有减小这个引用,我觉得可能需要在onDestory()做些工作。不过要解决楼主的问题,其实android提供了对应的方法的。可以在Activity的onRetainNonConfigurationInstance函数中将返回需要保存的数据,然后在onCreate中通过getLastNonConfigurationInstance()获取。如
    @Override
    public Object onRetainNonConfigurationInstance() {
        final MyDataObject data = collectMyLoadedData();
        return data;
    }@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);    final MyDataObject data = (MyDataObject) getLastNonConfigurationInstance();
        if (data == null) {
            data = loadMyData();
        }
        ...
    }
      

  7.   


    对的,之前我也遇到过类似的问题,activity在不停的被restart,参考
    http://blog.csdn.net/flyinwoods/article/details/6868843
      

  8.   

    确实不知道,就想知道楼主是不是耐得住性子啊。你那个LIST是静态的就不会释放里面的数据吧,感觉是在list里面存放bitmap是不?  也许你一直在向list里面存放数据。