OnDestroy () или finish () действительно убивают активность? - PullRequest
5 голосов
/ 24 мая 2011

На самом деле я знаю, что спрашиваю о простой и базовой концепции Android. Но я немного запутался в этих finish() и onDestroy() методах. Убьет ли это действие и освободит ли ресурсы, связанные с этим действием?

Я пробовал с простым приложением, которое содержит только одно действие. Я думал, что концепция, как когда приложение запускается, активность начнется. и когда мы нажмем на кнопку «Назад», это закончится. И я дал несколько тостовых сообщений в каждом методе жизненного цикла за знание использования памяти. И когда я нажал на кнопку «Назад», он выполнил onPause(), onStop() и onDestroy(). Я думал, что это действие закончено. Но когда я снова запустил приложение, тогда это заняло больше памяти, чем в прошлый раз. Это происходит каждый раз, когда я запускаю приложение из затмения или перезапускаю приложение с домашнего экрана.

Почему это происходит? Как я могу на самом деле уничтожить приложение / деятельность, чтобы освободить память?


Я включаю свой код. Я просто даю только одно тостовое сообщение внутри класса. Затем также увеличивается использование памяти.

Каждый раз, когда я запускаю приложение, выделенный размер увеличивается как: 3302744, 3442384, 3474552

 public class myActivity extends Activity
   {
         @Override
         public void onCreate(Bundle savedInstanceState)
         {
             super.onCreate(savedInstanceState);     
        Toast.makeText(getBaseContext()," allocated size  = " + Debug.getNativeHeapAllocatedSize(), 1).show();      
         }

   }

манифест:

<application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".myActivity "  
                  android:label="@string/app_name"  >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity> 
 </application>

Почему память увеличивается каждый раз?

Ответы [ 3 ]

14 голосов
/ 24 мая 2011

Finish () убивает действие и освобождает память ... если только у вас нет сохраненной ссылки, например, для таких методов, как onRetainNonConfigurationInstance ()

При нажатии кнопки «Назад» вызывается метод finish (), который вызывает onPause, onStop, onDestroy.

8 голосов
/ 24 мая 2011

Поведение по умолчанию заключается в том, что кнопка «Назад» приведет к завершению действия и будет уничтожена.Однако показ тостов в onDestroy или onPause не очень хорошая идея.Это изменит жизненный цикл вашей деятельности так, как вы этого не хотите.Вместо этого используйте ведение журнала, чтобы увидеть, что на самом деле происходит.Кстати, finish () - это то, что вы вызываете явным образом из своего кода, а onDestroy () - это событие / метод жизненного цикла, который вызывается в результате завершения или удаления действия любым способом.

2 голосов
/ 24 мая 2011

Finish () буквально завершит вашу деятельность, и, если нет ссылок, GC восстановит ресурсы.На самом деле onDestory () - это метод, который система будет вызывать, когда она разрушает вашу деятельность, и вы должны реализовать эту функцию.Вам не нужно беспокоиться об уничтожении вашего приложения, Android сделает это за вас.

...