Подтвердить что ты не робот

Активность OnDestroy никогда не называлась?

Я использую следующий код в своем ListActivity

// a separate class in project
public class MyActivity extends ListActivity {
    // some common functions here..
}

public class SelectLocation extends MyListActivity {

    public void onCreate(Bundle savedInstance) {
        // here.....
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (adap != null) adap = null;
        if (list != null) list = null;
        System.gc();
    }
}

кто-нибудь подскажет мне, почему метод onDestroy не вызывается в моем коде?

4b9b3361

Ответ 1

onDestroy() вызывается только тогда, когда система неактивна в ресурсах (память, время процессора и т.д.) и принимает решение убить вашу активность/приложение или когда кто-то вызывает finish() в вашей активности.

Итак, чтобы проверить ваш код(), вы можете создать тестовую кнопку, которая вызовет finish() в вашей деятельности.

Подробнее здесь.

Кроме того, я считаю, что вам не нужно вызывать все это в onDestroy(), пока адаптация не станет критическим ресурсом. И даже в этом случае у системы андроида есть механизмы, чтобы правильно их распоряжаться.

Ответ 2

Нет гарантии, что ваш метод onDestroy будет вообще вызван.

Код, который вы используете в методе onDestroy, вообще не нужен. Если уничтожение называется вашей активностью будет удалено из стека и бесплатно для сбора мусора в любом случае со всеми ресурсами в нем, на которые ссылается только действие. Также System.gc() должен быть плохим. В Android система почти всегда знает, когда самое лучшее время для сбора мусора. В большинстве случаев деятельность по сбору мусора запускается автоматически. Просто удалите весь метод onDestroy. Если у вас проблемы с общей памятью вашего приложения, проблема в другом месте.

Ответ 3

В большинстве телефонов при нажатии кнопки "Назад" вызывается дважды методы onStop() и onDestroy(), но если это не ваш случай, вы можете создать кнопку для вызова финиша(); Метод.