【问题标题】:Android Volley onResponse & recreating an ActivityAndroid Volley onResponse & 重新创建一个活动
【发布时间】:2014-08-18 16:19:18
【问题描述】:

当我重新创建我的 Activity(更改设备方向)并等待 Volley 请求响应时,“onResponse”上的代码没有任何效果,因为它正在被破坏的 Activity 上运行。

这是基本情况。为了方便起见,我只使用“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);
}

然后将“mWaitingServerResponse”的值与 savedInstanceState 一起记住。

因此,当 onResponse 运行时,它会更改已销毁活动的“mWaitingServerResponse”值,而不是更改设备方向更改后创建的活动的值。我怎样才能让 onRespond 对新活动采取行动?

【问题讨论】:

  • 为什么不尝试取消之前的请求并再次提出新的请求?
  • @mmlooloo 我不想丢失已经运行的请求的进度。我曾想过保持活动本身的静态引用。这将由 onResponse 使用并更新 onCreate。但是,保持对 Activity 本身的静态引用听起来很奇怪。
  • 我也认为我的方法泄露了活动:我不应该为侦听器使用匿名类,而是使用静态嵌套类。反正我还在猜测,如果有人能证实,那就太好了。
  • 服务器是否将您的文件设置为可缓存?
  • @efrel 1) 在可能有多个实例的活动的情况下,创建静态引用会很麻烦。 2)我很确定它至少会在请求完成之前泄漏活动。但是请求完成后我不太确定。

标签: android android-activity android-volley


【解决方案1】:

为有类似问题的其他人自行回答:

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

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

【讨论】:

    猜你喜欢
    • 2015-11-25
    • 2020-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多