Android: Activity.onDestroy() is not called when Dalvik kills this Activity
Asked Answered
P

1

9

I'm confused about Activity.onDestroy(). I need to free some resources when my Activity is destroyed, but it seems like onDestroy() is called just when i press "Back" key, but not when my Activity is killed by Dalvik. I tested it just by adding log:

Log.v("my_tag", "onDestroy() called");

and the same in onCreate() method too:

Log.v("my_tag", "onCreate() called");

Then i start my Activity, and i see in logs: onCreate() called. I press "Back" key and then start Activity again, then i see:

onDestroy() called
onCreate() called 

Then i press "Home" key and go to my Activity again, logs does not change. All right here.

Then i press "Home" key again and start some really "heavy" applications. In logs is nothing about onDestroy(), but when i start my Activity again, i see in logs: onCreate() called! So, onDestroy() was not called, but my Activity was killed. What's wrong?

Presuppose answered 29/12, 2011 at 10:59 Comment(0)
D
8

From the onDestroy() documentation:

[..] There are situations where the system will simply kill the activity's hosting process without calling this method (or any others) in it, so it should not be used to do things that are intended to remain around after the process goes away.

In Android, you won't get a guaranteed onDestroy() call.
If you want to release some resources, you should do that in onPause() instead.

Doublepark answered 29/12, 2011 at 11:2 Comment(2)
Hmm, thanks. In the docs also stated: "The entire lifetime of an activity happens between the first call to onCreate(Bundle) through to a single final call to onDestroy()", so, I thought it should be called anyway. Well, then, where should i free resourses to be sure it will be called? Actually this Activity binds the Service, and i want to unbind it before Activity becomes destroyed.Presuppose
Oh, i'm sorry, i see that you already said: i should do it in onPause(). Thanks again.Presuppose

© 2022 - 2024 — McMap. All rights reserved.