繁体   English   中英

Android Volley onResponse和重新创建活动

[英]Android Volley onResponse & recreating an Activity

当我重新创建活动(改变设备方向)并等待Volley请求响应时,“ onResponse”上的代码无效,因为它正在销毁的活动上运行。

这是基本情况。 为了简单起见,我只使用“ mWaitingServerResponse”作为关键信息。 这工作正常:

public void onLoginButtonClick(View view) {

        // Store we are waiting for server
        mWaitingServerResponse = true;

        sendLoginRequest();
}

public void sendLoginRequest() {
    StringRequest loginRequest = new StringRequest(
            Request.Method.GET, url, null,

            new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {

                    // Store we are not waiting for server anymore
                    mWaitingServerResponse = false;                     
                }
            }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {

                    // Store we are not waiting for server anymore
                    mWaitingServerResponse = false;
                }
            });
    mVolley.addToRequestQueue(loginRequest);
}

然后,使用saveedInstanceState记住“ mWaitingServerResponse”的值。

因此,运行onResponse时,它将在已销毁的活动上更改“ mWaitingServerResponse”的值,而不是在更改设备方向后创建的活动上更改该值。 如何使onRespond对新活动采取行动?

具有类似问题的其他人的自我解答:

现在,我将尝试使用setRetainInstance(true)从片段发送请求。 由于配置更改(例如设备方向)而重新创建活动的这种方式不会影响它。

为避免泄漏,我认为应在片段onDestroy()上取消该请求,并且该片段不得包含对与Activity绑定的对象的任何引用,例如Drawable,Adapter,View或其他与上下文相关联。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM