我听说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;
}
}
答案 0 :(得分:0)
实际上垃圾收集器是为你做的。
你粘贴的文字说的是,如果你正在创建的Anonymous类启动一个新的AsyncTask,你创建它的主类将永远不会被销毁......
换句话说,有一个匿名类运行任务onDestroy永远不会在主类上调用