我的Activity的方向更改遇到内存泄漏问题.使用android工具和Memory Analysis Perspective(http://ttlnews.blogspot.com/2010/01/attacking-memory-problems-on-android.html),我终于发现了以下问题:
在方向更改期间,我将所需的数据保存到Inner类中,如下面的代码所示:
public class TestOrientation extends Activity {
private ActivityData mData;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mylayout);
...
mData = (ActivityData) getLastNonConfigurationInstance();
...
}
@Override
public Object onRetainNonConfigurationInstance() {
return new ActivityData(dataToSave1, dataToSave2);
}
private class ActivityData {
public int mDataToSave1;
public String mDataToSave2;
public ActivityData(int dataToSave1, String dataToSave2) {
mDataToSave1 = dataToSave1;
mDataToSave2 = dataToSave2;
}
}
}
Run Code Online (Sandbox Code Playgroud)
在内存内存分析透视中,我可以看到属性mData保持对活动上下文的引用,因此它永远不会被释放.在几个方向更改后,我有一个递归参考:

为了解决这个问题,我已将ActivityData声明为一个单独的文件,但如果有人能解释我为什么会遇到这个问题,我会很棒!
| 归档时间: |
|
| 查看次数: |
1569 次 |
| 最近记录: |