Weird: It appears as if sometimes my Activity will be resumed but previously set instance variables are null

by Bob Kerns » Tue, 20 Apr 2010 17:18:58 GMT


Sponsored Links
 I do this, without any issues at all.

How are you getting your Application instance from your activities?
not getApplicationContext() I hope...

Have you examined the state from the debugger? There may be something
you're missing about the state of things.



> thread



Weird: It appears as if sometimes my Activity will be resumed but previously set instance variables are null

by patbenatar » Tue, 20 Apr 2010 18:04:18 GMT


 Bob-

Nope, I'm using getApplication()

For instance [inside an Activity]:


MyApplication application;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    application = (MyApplication) this.getApplication();
}


The error is most easily re-produceable when I am in Activity B, after
A started it for result, and then click a button in B to launch Maps
with an Intent to search for an address, then from Maps I hit Home
then my launcher icon on my Home Screen to go back into my app--BAM!
Activity B fails onResume with a NullPointerException coming from a
getter method on my MyApplication class, when I know for sure Activity
A properly set the data in MyApplication..

So strange...

Thanks,
Nick






> > thread


Sponsored Links


Weird: It appears as if sometimes my Activity will be resumed but previously set instance variables are null

by westmeadboy » Tue, 20 Apr 2010 19:05:50 GMT


 Not sure if this helps, but use
 http://developer.android.com/reference/java/lang/System.html #identityHashCode(java.lang.Object)
to check whether the Application object is indeed the same in both
cases (or whether they are in different DVMs)





> > > thread



Weird: It appears as if sometimes my Activity will be resumed but previously set instance variables are null

by Mark Murphy » Tue, 20 Apr 2010 19:47:52 GMT


 


A database, flat file, or other persistent store is the proper place for
it, perhaps cached via a custom Application class or static data members.

> 



Weird: It appears as if sometimes my Activity will be resumed but previously set instance variables are null

by String » Tue, 20 Apr 2010 20:59:03 GMT


 



Sure, that's the normal app lifecycle. But if this is the case, why
isn't the Activity's onCreate being called? To me, that's the
confusing part of this.

String

--



Weird: It appears as if sometimes my Activity will be resumed but previously set instance variables are null

by Mark Murphy » Tue, 20 Apr 2010 21:04:00 GMT


 




Whoops. I missed that part. If that's happening, that is very strange.
The Application object should be the second-to-last thing to go -- if
activities are in RAM, so should the Application, AFAIK.

That being said, the *last* thing to go is static data members, since
they'll only get cleaned up when the whole Dalvik VM is reset or the
process is fully terminated. It may be worth a test to see if a static
data member survives all of this.

Something definitely is not adding up.

My apologies for missing that part of the original post and not
addressing it in my earlier reply.

-- 
Mark Murphy (a Commons Guy)
 http://commonsware.com  |  http://twitter.com/commonsguy 

_Android Programming Tutorials_ Version 2.0 Available!

--



Weird: It appears as if sometimes my Activity will be resumed but previously set instance variables are null

by Christopher » Wed, 21 Apr 2010 00:48:53 GMT


 Just out of curiosity, is your Activity making use of onNewIntent()?
I was curious because I recently worked on an Activity that did, and
found that many variables in the Activity were set to null after this
method completed.  It's almost as if onNewIntent does a quick reset of
the instance, which given the nature of onNewIntent could make sense.
I might not be 100% accurate in terms of what's going on, but thought
perhaps the information could help.


(Note: I think I originally replied only to the author, so I attempted
to reconstruct the post as best I could.  I apologize if suddenly
there are two almost identical posts from me that show up).


Christopher

--



Weird: It appears as if sometimes my Activity will be resumed but previously set instance variables are null

by patbenatar » Wed, 21 Apr 2010 09:36:41 GMT


 Thanks for all the input guys--

Mark, it is indeed very strange that my Activity's onCreate is not
being called here. And the reason I have chosen not to use a database
or flat file is because the lifetime of this data is a maximum of 20
minutes before my app rules it outdated and fetches new data from the
server. Didn't really see the point in writing data with such a short
shelf life to a more permanent data store. If my app is destroyed and
relaunched within this 20 minute period, I have no problem with doing
a fresh API fetch (why not? the more frequently [while remaining un-
invasive] I can update the data, the better)... I will throw

Christopher, nope not overring onNewIntent--sounds like some weird
behavior you've run into there...

Is it possible that a memory leak could possibly be the cause of this
behavior? I had some leaks previously but went through all my code a
couple weeks ago and believe I have removed them all but I haven't
completely confirmed this [although my app hasn't hit any OutOfMemory
errors since then]. I don't see why a memory leak would be removing
data though, normally they causes data to pile up...

I have found one issue in my code that may resolve this.. I
implemented a potential fix but have not had a chance to test on my
device yet. Will post back. In the meanwhile, anyone else with
thoughts on this matter, please share :)

Nick





>



Weird: It appears as if sometimes my Activity will be resumed but previously set instance variables are null

by Dianne Hackborn » Wed, 21 Apr 2010 11:23:50 GMT


 Fwiw, there is definitely no clearing of instance variables when
onNewIntent() is called.  I can't imagine how the framework would even clear
instance variables, except for using reflection to find them and poke them,
which we definitely don't do.

For these situations it may be useful to look at the event log (adb logcat
-b events) to see what the system is doing, and also possibly the activity
manager state (adb shell dumpsys activity) to see the state the system has
your activities in.




>



Weird: It appears as if sometimes my Activity will be resumed but previously set instance variables are null

by Bob Kerns » Thu, 22 Apr 2010 03:59:39 GMT


 Or use the debugger, and set breakpoints in each method on the
affected class, and step through until you see where the field is
being cleared.




> >



Other Threads

1. Telephony flow

Hi Is there a document which explains the internals of android like
service layer, RIL layer Telephony Managar etc.
More precisely i would like to know if any document which explains the
flow of request and response for example an MO Call setup request from
a voice call appln to the Telephony and to the modem. How the request
is routed from Appln till the modem.and how the response is given to
the application. If there is a document please share it.
--~--~---------~--~----~------------~-------~--~----~
unsubscribe: [EMAIL PROTECTED]
website: 

2. Epilog: Largish HTTP Post vs. ANR



Ah, nice. You should put this in your documentation on ANR on your web pages.
Stupid question: how can I read this from the shell on my G1? It's
giving me file
perm error on /data (which isn't true of the emulator).

So I finally figured out what was going on. It had nothing to do with
HTTP posts,
thankfully. What it did have to do with was Formatter (or String.format). An
innocuous foreground loop using Formatter was taking 10 seconds for about
10kb worth of data. The same loop using string concats (ie, this+""+that) takes
100ms. What on earth is Formatter doing that takes 2 orders of magnitude
more time? Something's really out of whack.

Interesting tidbit2: per Mark's suggestion, I implemented the HTTP post using
both HttpURLConnection and DefaultHttpClient mechanisms. The DefaultHttpClient
method was about 5-10x *slower* than HttpURLConnection for identical data. Not
sure why that is... maybe using stringsBuffers to collect the post
data instead of
file io is a lose.

Mike








--~--~---------~--~----~------------~-------~--~----~

3. how to send the device's browser to a specific url on android

4. Link to software on market?

5. Shutting down VM <--- No pending application record for pid 0 (Phone and acore)

6. A Non-Google 64 Bit G1 ADB Driver is available

7. Listening for dynamic buttons created by an adapter