从Retrofit2回调的onResponse引用活动时避免内存泄漏

时间:2018-06-19 11:26:09

标签: android memory-leaks retrofit2 logout

假设我们有一个改进的回调,如下所示:

    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中获取上下文?参考弱?但这是一个常见的用例,即在身份验证失败的情况下注销用户。我想知道这种情况下针对一般AsyncTask案例和改造案例的最佳实践。

0 个答案:

没有答案