i just recalled i wanted one last thing clarified - in an android system, what's the relevance of the "Task Manager"? i was under the impression that if i were to terminate an application there, it also meant that its related process would end. Conversely, i believed that if the process related to an app is running, then it shows up in the Task Manager.
Clearly this is not the case, as i verified on my device. So can you let me know what precisely is the role of the Task Manager? On Sun, May 29, 2011 at 4:53 PM, Anirban Majumdar < [email protected]> wrote: > 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" <[email protected]> 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 <[email protected]> > > > >> 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 <[email protected]> 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 <[email protected]> > >> > > >> > > >> > > >> > > >> > > >> > > >> > > >> > > 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 <[email protected]> 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 <[email protected]> > >> > > >> > > > > 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 > >> > > [email protected] > >> > > > > To unsubscribe from this group, send email to > >> > > > > [email protected] > >> > > > > 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 > >> [email protected] > >> > > To unsubscribe from this group, send email to > >> > > [email protected] > >> > > 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 [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/android-developers?hl=en

