Java 匿名类对象是否应设置为空onDestroy?
我听说了 类似地,匿名类还将维护对它们在其中声明的类的引用。因此,如果在活动中匿名声明和实例化异步任务,则可能发生泄漏。如果它在活动被销毁后继续执行后台工作,则对该活动的引用将持续存在,并且在后台任务完成之前不会对其进行垃圾收集 匿名类对象是否应设置为空onDestroy以防止内存泄漏?下面是我的一些代码Java 匿名类对象是否应设置为空onDestroy?,java,android,memory-leaks,anonymous-class,Java,Android,Memory Leaks,Anonymous Class,我听说了 类似地,匿名类还将维护对它们在其中声明的类的引用。因此,如果在活动中匿名声明和实例化异步任务,则可能发生泄漏。如果它在活动被销毁后继续执行后台工作,则对该活动的引用将持续存在,并且在后台任务完成之前不会对其进行垃圾收集 匿名类对象是否应设置为空onDestroy以防止内存泄漏?下面是我的一些代码 public class RegisterActivity extends AppCompatActivity { private ApiHandler registerHandler
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;
}
}
事实上,我是为你做的 您粘贴的文本说明,如果您正在创建的匿名类启动了一个新的AsyncTask,那么您创建它的主类将永远不会被销毁
换句话说,虽然有一个匿名类运行tasks,但从不在主类上调用onDestroy,如果您正在生成一个AsyncTask,并且您知道活动将被销毁或可能在过程中被销毁,那么在onDestroy()内部调用AsyncTask.cancel(),然后在super.onDestroy()之前调用onDestroy()。。。另外,在AsyncTask类内部,在onCancel()内部,请确保清除所有内容,因为取消引用没有人们通常认为的有用,通常是不必要的。预防胜于治疗。不要为引用设置空值,不要做GC的工作,而是仔细地确定引用的范围。不要使用内部类不适当地保留对包含类实例的引用。如果您正确地协调了对象的生命周期,那么您就不需要笨拙的黑客来协调内存管理。