匿名类对象应该设置为null onDestroy吗?

时间:2017-03-16 03:06:36

标签: java android memory-leaks anonymous-class

我听说the Anonymous Classes can leak memory

  

类似地,Anonymous Classes也将维护对它们在内部声明的类的引用。因此,如果在Activity中匿名声明并实例化AsyncTask,则可能会发生泄漏。如果在销毁Activity之后它继续执行后台工作,则对Activity的引用将持续存在,并且在后台任务完成之前不会对其进行垃圾收集。

是否应将匿名类对象设置为null onDestroy以防止内存泄漏?以下是我的一些代码。

public class RegisterActivity extends AppCompatActivity {
    private ApiHandler registerHandler = null;
    private static final int SERVICE_REQUEST_REGISTER = 243;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_register);
        init();
    }

    private void init() {
        useApiService();
        initApiHandler();
    }

    protected void useApiService() {
        apiService = ApiClient.getClient(getApplicationContext()).create(ApiInterface.class);
    }

    private void initApiHandler() {
        registerHandler = new ApiHandler(this, SERVICE_REQUEST_REGISTER) {
            @Override
            protected String successStatusCode() {
                return "802";
            }

            @Override
            protected String secretKey() {
                return getDefaultKey();
            }

            @Override
            protected boolean isExchangeSecretKey() {
                return false;
            }
        };
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        registerHandler = null;
    }
}

1 个答案:

答案 0 :(得分:0)

实际上垃圾收集器是为你做的。

你粘贴的文字说的是,如果你正在创建的Anonymous类启动一个新的AsyncTask,你创建它的主类将永远不会被销毁......

换句话说,有一个匿名类运行任务onDestroy永远不会在主类上调用