我使用Android Studio 1.5来检测活动泄漏。我有一个简单的排球请求:
VolleyRequestManager.getRequestQueue().add(new CustomRequest(new Response.Listener<Response>() {
@Override
public void onResponse(final Response response) {
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
}));
这样就不会像预期的那样发生泄漏。
但是当我在onResponse回调中触摸视图时,像:
@Override
public void onResponse(final Response response) {
findViewById(R.id.container).setVisibility(View.GONE);
}
活动将泄漏!!
注意:我使用的是Volley 1.0.19,这个问题只发生在pre-lollipop设备上。
Activity
泄漏的原因是您在Response.Listener
中保持Activity
引用,当您的活动完成时,请求仍在后台执行,而不是Activity
泄漏…
第一个解决方案是在Response.Listener
中保持Activity
引用,并在完成Activity(在ondestroy方法中)时将其设置为null。
第二个:使用EventBus
。在您的活动中注册successEvent
,并在onResponse
方法中发布successEvent(with response data)
。