Android& Gson内存泄漏

时间:2013-03-30 12:09:14

标签: android memory-leaks gson

Android应用程序项目的简单示例(在Eclipse中)。查看代码示例和内存快照图片之间的差异。似乎调用com.google.gson.Gson.toJson会导致内存泄漏。 示例1(行调用printObject被注释):

public class MainActivity extends Activity
{
...
@Override protected void onRestoreInstanceState(Bundle savedInstanceState)
{
    // Log.v(TAG, ">>> ACTIVITY  [onRestoreInstanceState] config:"+printObject(savedInstanceState));
    super.onRestoreInstanceState(savedInstanceState);
}
public String printObject(Object object)
{
    try  { return new Gson().toJson(object); }
    catch (Throwable ex){return "[FAILED to PRINT Object] : "+ex.getMessage();}
}
}

示例2(简称相同的代码,除了UNCOMMENTED Log .... line。所以WITH调用printObjet):

...
@Override protected void onRestoreInstanceState(Bundle savedInstanceState)
{
    Log.v(TAG, ">>> ACTIVITY  [onRestoreInstanceState] config:"+printObject(savedInstanceState));
    super.onRestoreInstanceState(savedInstanceState);
}

以下是样本1和2的Eclipse Memory Analyzer快照,分别为62次(每种情况下)旋转平板电脑设备以重启Activity:

For Sample 1:

For Sample 2:

第二张图片的绿色区域“泄漏怀疑”:

  

问题可疑3

     

由“dalvik.system.PathClassLoader @ 0x416beb30”加载的62个“com.example.leaktest.MainActivity”实例占用1,959,008(24.72%)个字节。

用于测试:Eclipse 4.2 / Gson 2.2.2(和2.1)/ Android 4.2 / Android平板电脑4.1.1

网上有一些类似的问题: hereand here

问题:这是一个问题(在Android或Gson中)?或者我错过了教训:)?

1 个答案:

答案 0 :(得分:0)

您的问题是62 instances of "com.example.leaktest.MainActivity",与Gson无关。有很多关于避免活动泄漏的信息,包括Android开发者博客上的this post