当在Volley响应回调中触摸视图时,Android活动被泄露.有什么想法或解决方案吗?



我使用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)

最新更新