У меня есть класс для CustomView, который имеет внутренние классы, и реализовать Runnable для выполнения задания в отдельном потоке.Чистый внутренний класс, реализующий Runnable
public class ValueSelector extends LinearLayout{
.....
private class AutoIncrementer implements Runnable {
@Override
public void run() {
if (plusButtonIsPressed) {
incrementValue();
mHandler.postDelayed(new AutoIncrementer(), REPEAT_INTERVAL_MS);
} else {
mHandler.removeCallbacks(this);
Thread.currentThread().interrupt();
}
}
}
private class AutoDecrementer implements Runnable {
@Override
public void run() {
if (minusButtonIsPressed) {
decrementValue();
mHandler.postDelayed(new AutoDecrementer(), REPEAT_INTERVAL_MS);
} else {
mHandler.removeCallbacks(this);
Thread.currentThread().interrupt();
}
}
}
}
Как правильно их очистить? Получают ли они Разрушенные автоматически, когда действие, в котором находятся эти CustomViews, будет уничтожено?
Приветствия
Они никогда не «разрушаются». После этого они получат сбор мусора после того, как они станут недоступными, как и любой другой экземпляр объекта в Java. В этом случае, вероятно, будет некоторое время после прекращения работы потока. – Andreas
нормальный внутренний класс включает неявную ссылку на верхний класс, поэтому при уничтожении активности все еще будет существовать ссылка с этим, и gc не будет очищать эту проблему, вам нужно сделать внутренний класс static, а также использовать weakreference, а также использовать обработчик потока для длительных рабочих заданий и runOnUiThread метод u может обновить ваш ui –