0
我聽說the Anonymous Classes can leak memory。應將匿名類對象設置爲null onDestroy?
同樣,匿名類也將保持對它們在裏面聲明的類的引用。因此,如果您在活動中匿名聲明並實例化AsyncTask,則可能會發生泄漏。如果它在活動被銷燬後繼續執行後臺工作,那麼活動的引用將會持續存在,直到後臺任務完成後纔會被垃圾收集。
應將匿名類對象設置爲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;
}
}
如果您正在製作一個AsyncTask,並且您知道該活動將被銷燬或可能在進程中被銷燬,那麼在onDestroy()之前調用AsyncTask.cancel() super.onDestroy()...另外,在AsyncTask類的內部,onCancel()內部確保你清除了所有的內容 – MohammedAlSafwan
Nulling引用比人們通常沒有用處認爲,通常不必要。預防勝於治療。不要去掉引用,不要執行GC的工作,仔細確定引用的範圍。不要使用內部類來不恰當地持有對包含類實例的引用。如果你正確地協調對象的生命週期,你將不需要使用kludgey來克服內存管理。 –