I hope some Google engineers can way in when and when not to use getApplicationContext().
I use it all the time for getting a context that isn't tied to an activity life-cycle, which - as i am now learning - may be incorrect. On Jun 20, 9:06 pm, Bob Kerns <r...@acm.org> wrote: > You should read the documentation for getApplicationContext(), and not > simply believe what the name says. > > It does NOT, repeat, NOT, return your application. Well, it might, but > it might not. > > "Return the context of the single, global Application object of the > current process. This generally should only be used if you need a > Context whose lifecycle is separate from the current context, that is > tied to the lifetime of the process rather than the current > component." > > Read that carefully. I didn't, first time. The application object it > returns may not even be associated with your current .apk -- it can be > some other .apk with code running in the same process. > > It does NOT necessarily return the same as Activity.getApplication(). > > Activity.getApplication() can be useful. I claim > Context.getApplicationContext() should absolutely NEVER be called by > developers using the SDK. We simply do not have sufficient control > over what it returns. It may work today -- and then later, when you > introduce another .apk with the same signature and process name, > suddenly stop working -- some of the time. > > This literally happened to me, which is why I'm clear on the point. > > The object it returns may even have been loaded with a different > classloader -- you won't even be able to cast to get access. > > The page you linked needs to be fixed! Just as various demos needed to > be fixed for the same flaw. > > On Jun 19, 6:04 pm, Nathan <critter...@crittermap.com> wrote: > > > > > On Jun 19, 5:45 pm, Mark Murphy <mmur...@commonsware.com> wrote: > > > > Well, as I wrote: > > > > "A number of GUI-related things fail outright if you use > > > getApplicationContext() instead of an Activity, for example." > > > > Off the top of my head, I can't name any specific methods. Resources > > > don't map right, IIRC, and you can't use one for opening a Dialog. It > > > seems like any time I suggest somebody replace getApplicationContext() > > > with "this" in a StackOverflow answer, it fixes their problem. > > > Frankly, I just avoid getApplicationContext() completely unless I am > > > specifically looking for the Application object. > > > > Also, FWIW, Ms. Hackborn has voiced her concerns about Application as > > > a Context in the past. > > > Advice from Google Developers isn't exactly consistent on this point, > > then. > > > From this page: > > >http://developer.android.com/intl/de/resources/articles/avoiding-memo... > > " The second solution is to use the Application context. This context > > will live as long as your application is alive and does not depend on > > the activities life cycle. If you plan on keeping long-lived objects > > that need a context, remember the application object. You can obtain > > it easily by calling Context.getApplicationContext() or > > Activity.getApplication()." > > > Romain and Ms. Hackborn should probably talk. First, we should use an > > application context to avoid storing the Activity context. Second, we > > should use an Activity context because an application context plain > > won't work. > > > Perhaps these aren't in conflict. If you have to store a context > > beyond the life of an Activity (something to be avoided when > > possible), you are stuck with the application context and whatever > > limitations it has. > > > I don't know what Google Analytics does with the context; I'd guess > > they use the file system for temp storage. I don't if I'm allowed to > > reverse engineer the jar to find out, because the terms and conditions > > page is down. > > > Nathan- Hide quoted text - > > - Show quoted text - -- 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