Ne onDestroy() ou la fin (de) fait tuer l'activité?
En fait, je sais que je fais une demande sur le simple et le concept de base d'Android. Mais je suis un peu confus au sujet de ces finish()
et onDestroy()
méthodes.
Si ça va tuer l'activité et de libérer les ressources associées à ces activités?
J'ai essayé avec une application simple qui ne contient qu'une seule activité. Je pensais que le concept est comme Lorsque l'application s'exécute, l'activité va commencer. et lorsque l'on clique sur le bouton de retour, elle va se terminer. Et j'ai donné des toasts message à l'intérieur de chaque cycle de vie des méthodes pour connaître l'utilisation de la mémoire . Et quand j'ai cliqué sur le bouton de retour, il a exécuté onPause()
, onStop()
, et onDestroy()
. J'ai pensé que cette activité terminée. Mais quand j'ai relancé l'application à nouveau, puis il a fallu plus de mémoire que la fois précédente. Cela se produit chaque fois quand je lance l'application à partir d'eclipse ou de relancer l'application à partir de l'écran d'accueil.
Pourquoi est-il passe? Comment puis-je réellement détruire la demande /de l'activité pour libérer de la mémoire?
Je joins mon code. Je viens de donner un seul toast message à l'intérieur de la classe. Puis aussi l'utilisation de la mémoire augmente.
À chaque fois quand je lance l'application, la taille allouée est de plus en plus comme : 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();
}
}
manifeste:
<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>
Pourquoi la mémoire augmente à chaque fois?
OriginalL'auteur Jomia | 2011-05-24
Vous devez vous connecter pour publier un commentaire.
La finition() tue l'activité et libère de la mémoire... sauf si vous avez certains de référence stockée qui est une fuite... par exemple sur les méthodes comme onRetainNonConfigurationInstance()
Lorsque vous appuyez sur le bouton retour de ce qui est appelé la finition() méthode qui que les appels onPause, onStop, onDestroy.
OriginalL'auteur neteinstein
Le comportement par défaut est que le bouton de retour seront la cause de l'activité pour sortir, et il va être détruit.
L'affichage de porter un toast en l'onDestroy ou onPause n'est pas une bonne idée. Il va modifier le cycle de vie de la de votre activité d'une manière que vous ne voulez pas que ça arrive.
Utilisation de la journalisation au lieu de cela, donc, vous allez voir ce qui se passe réellement.
BTW, finish() est quelque chose que vous appeler explicitement à partir de votre code et onDestroy() est un événement de cycle de vie/méthode qui est appelée comme un résultat de finition/destoying l'activité en aucune manière.
Je vous suggérons d'utiliser le TAPIS de plugin pour Eclipse pour résoudre les fuites de mémoire. Votre méthode peut ne pas être ce que vous êtes en train d'observer. (d'abord quitter le Toasts de sortir et de passer à des lignes de log)
OriginalL'auteur user289463
Finish() va littéralement finition de votre activité et en l'absence de références sont présents, un GC récupérer des ressources. onDestory() est une méthode que le système appellera quand il est en train de détruire votre activité et vous êtes censé mettre en œuvre cette fonction. Vous n'avez pas besoin de s'inquiéter avout la destruction de votre app , android le fait pour vous.
Le Garbage Collector de récupérer la mémoire de tous les objets qui n'ont aucune référence à eux. Mais comme je l'ai dit, vous ne pouvez pas appeler/ne devrait pas appeler onDestroy , qui est le cadre de travail
OriginalL'auteur Ravi Vyas