I am so thankful to you kostya, for such an excellent and simple explanation.
Lesson learnt. Thanks again. On 29 May 2011 15:13, "Kostya Vasilyev" <kmans...@gmail.com> wrote: > Replying back to the list. > > Most (all?) platforms' model is process == application (more or less). > > In Android, there really is no such thing as "the application" (there is, > but it is useful to ignore it at first). Therefore, one should unlearn that > equality between "application" and process > > The unit of installation is package, and the unit of execution is component. > Components come in various shapes: activity, broadcast receiver, service, > content provider, etc. These components have well defined lifecycles with > callbacks. > > On the other hand, a process is more or less just an implementation detail, > having to do more with memory and file protection, crash handling, dealing > with out of memory situations, etc. > > Android keeps processes running as long as possible while there is > enough memory. This significantly improves performance if the user or the > system again needs one of the components provided by this process. Well > written code detects when it's in the background and stops CPU intensive > work, so it just sits there dormant, not consuming the CPU & battery > resources. > > Mark Murphy compares this model to a web application: just because the user > left a page, doesn't mean the web server is stopped right away. > > I see a similarity to Microsoft COM. Android components are similar to COM > objects with a well defined interface (Automation?). Releasing a COM object > is not the same as stopping its process, one could keep the process around > for a while in case another of its objects is needed (although I don't > remember is Windows actually does that....). > > There is a hack an application can use to stop its process, but it is seen > by Android as an application crash, and may have unplesant side effects, so > I'm not going to provide it here. > > Bottom line - don't worry about process lifetimes too much yourself, and > tell users who do that they need to "learn to stop worrying and love the > Android way of managing resources". > > -- Kostya > > 2011/5/29 Anirvan <anirvan.majum...@gmail.com> > >> thanks for your patience and responses kostya. i really appreciate it. >> >> the tip for tracking the process state through the ddms is a good one. >> so far, i've only used the ddms to track memory usage, cpu load and >> log comments. and yes, you're right. even upon pressing 'back' from >> the one and only main activity does NOT kill the process. >> >> i wonder why :[ - it feels very counter-intuitive. i understand that >> pressing the 'home' button while the app runs, puts the app's state >> into a stack which android can recover again. but i certainly feel >> that pressing back from the main activity should kill the process >> unless explicitly programmed not to do so. >> >> at this point, i'll need to work around this new found knowledge about >> process lifecycles. >> >> while you mentioned that there doesn't exist a callback mechanism for >> process kills, but is there a way through which the app process can be >> killed programmatically from within an app? >> >> >> On May 29, 2:14 am, Kostya Vasilyev <kmans...@gmail.com> wrote: >> > Your application logic should be coded in such a way that the process can >> be >> > killed at any time (usually once it's in the background), or not be >> killed, >> > and still work correctly. There is no callback when the process is >> killed. >> > >> > Pressing the back key always finishes the current activity - the back key >> > tells Android that the user is done with whatever he was doing in that >> > activity, and will not come back. But this does not kill the process, >> > because activity != process. >> > >> > Try pressing the home key instead - the activity will be paused / >> stopped, >> > but not terminated, then come back by long-pressing the home key - you >> > should see onStart / onResume, but not onCreate. >> > >> > All of this is explained very well here: >> > >> > http://developer.android.com/guide/topics/fundamentals/activities.htm. .. >> > >> > http://developer.android.com/guide/topics/fundamentals/processes-and-. .. >> > >> > For debugging purposes, use "adb shell ps" (the usual Unix "ps" - process >> > state), look for your application within the process list, and note its >> > process ID. >> > >> > Or use the DDMS perspective in Eclipse - the second column in the Devices >> > panel, under Online, is also the process ID. >> > >> > -- Kostya >> > 2011/5/29 Anirvan <anirvan.majum...@gmail.com> >> > >> > >> > >> > >> > >> > >> > >> > > thanks for the response Kostya. but i does one truly determine that >> > > the application 'process' has terminated? >> > >> > > for testing, i've created a single Activity which serves as the Main. >> > > when i press the back button after launching this activity, the app >> > > ends. i've also verified that the app is no longer running by checking >> > > the Task Manager. >> > >> > > is there some other check that i can make from my program to make sure >> > > that the app process has terminated? >> > >> > > On May 29, 12:33 am, Kostya Vasilyev <kmans...@gmail.com> wrote: >> > > > Statics do live as long as the process. >> > >> > > > onDestroy is not an indication that the process is exiting - your >> > > activity >> > > > is getting destroyed, but the process may (and in your case, does) >> live >> > > on. >> > > > When you come back to the application, Android uses the same process >> to >> > > > create another instance of your activity and call onCreate (and other >> > > > callbacks). >> > >> > > > Try stopping your application in the Settings application. >> > >> > > > Making a small code change and relaunching the debug session is >> another >> > > way >> > > > to make sure you get a brand new process. >> > >> > > > -- Kostya >> > >> > > > 2011/5/28 Anirvan <anirvan.majum...@gmail.com> >> > >> > > > > hello, >> > >> > > > > for quite some time i was blissfully of the opinion that static >> > > > > [instance] variables exist as long as the app runs. however, to my >> > > > > dismay, and much alarm, i feel that it's not true. >> > >> > > > > for mere testing, i created a static list of strings, and in my >> main >> > > > > activity class overrode the onDestroy method to print a message to >> > > > > verify that the app exited. in the onCreate method i simply added a >> > > > > new string, and printed the contents of the list. what i've found >> is >> > > > > that the size of the list keeps on increasing, and all the string >> > > > > values added previously are still present. >> > >> > > > > is there some cardinal mistake in what i assumed should be the >> > > > > behaviour of instance variables, or is there something that i >> should >> > > > > keep in mind when dealing with instance variables? >> > >> > > > > what gives? >> > >> > > > > thanks for your time and help. >> > >> > > > > -- >> > > > > You received this message because you are subscribed to the Google >> > > > > Groups "Android Developers" group. >> > > > > To post to this group, send email to >> > > android-developers@googlegroups.com >> > > > > To unsubscribe from this group, send email to >> > > > > android-developers+unsubscr...@googlegroups.com >> > > > > For more options, visit this group at >> > > > >http://groups.google.com/group/android-developers?hl=en >> > >> > > -- >> > > You received this message because you are subscribed to the Google >> > > Groups "Android Developers" group. >> > > To post to this group, send email to >> android-developers@googlegroups.com >> > > To unsubscribe from this group, send email to >> > > android-developers+unsubscr...@googlegroups.com >> > > For more options, visit this group at >> > >http://groups.google.com/group/android-developers?hl=en >> -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to android-developers@googlegroups.com To unsubscribe from this group, send email to android-developers+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/android-developers?hl=en