代码之家  ›  专栏  ›  技术社区  ›  sandpat

避免在从refinition2回调的onResponse引用活动时发生内存泄漏

  •  1
  • sandpat  · 技术社区  · 7 年前

    假设我们有一个更新回调,如下所示:

        Callback<T> callback = new Callback<T>() {
            @Override
            public void onResponse(Call<T> call, Response<T> response) {
                                mProgressBar.dismiss();
                if (response.code() == 401) {
                    Toast.makeText(getApplicationContext(),
                            "Invalid session, logging out",
                            Toast.LENGTH_LONG).show();
                    Session.getInstance(getApplicationContext()).clear();
                    this.navigateToLoginActivity();
                }
    
            }
    
            @Override
            public void onFailure(Call<T> call, Throwable t) {
    
            }
        }
    

    假设带有此回调的改装请求运行了很长一段时间,并且如果在调用onResponse时启动请求的活动已经完成,那么它将导致我们通过引用该活动的内存泄漏

    this.navigateToLoginActivity()

    所以问题是如何在onResponse中获取上下文?WeakReference公司?但这是一个很常见的用例,即注销用户,以防身份验证失败。我想知道在这个场景中对于一般异步任务案例和改造案例的最佳实践。

    0 回复  |  直到 7 年前
    推荐文章