内存泄漏在下面的例子。内存泄漏while setListener
1.SpeedHelper.java:
public class SpeedHelper {
interface Listener {
void OnSelected(String entry);
}
static Listener sListener;
static void setListener(Listener listener) {
sListener = listener;
}
static Listener getListener() {
return sListener;
}
static void clearListener() {
sListener = null;
}
}
2.CallSpeed.java
public class CallSpeed {
protected void speed() {
SpeedHelper.Listener litener = SpeedHelper.getListener();
if (litener != null) {
litener.OnSelected("mEntry");
}
}
}
3.MainActivity.java
public class MainActivity extends Activity {
private CallSpeed callspeed;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SpeedHelper.setListener(mCallSpeedListener);
callspeed = new CallSpeed();
callspeed.speed();
}
private SpeedHelper.Listener mCallSpeedListener = new SpeedHelper.Listener() {
@Override
public void OnSelected(String entry) {
Toast.makeText(getApplicationContext(), entry, Toast.LENGTH_SHORT).show();
}
};
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
SpeedHelper.clearListener();
}
}
如何避免内存泄漏的 “sListener” ?
“直接调用clearListener在另一个活动回调时终止”,我没有得到这个。 – user1905715
私人SpeedHelper.Listener mCallSpeedListener =新SpeedHelper.Listener(){ @Override 公共无效OnSelected(字符串条目){ Toast.makeText(getApplicationContext(),条目,Toast.LENGTH_SHORT).show(); 'SpeedHelper.clearListener(); mCallSpeedListener = NULL;' } }; 是否正确? – user1905715
对于我关于使用onDestroy或onPause等onDestroy以外的其他内容的评论,它已经是深夜了,onDestroy并没有真正与GC过程绑定:即使GC不能收集活动的记忆,它也会被调用。你是如何确定sListener存在内存泄漏的? – SylvainL