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. USB drivers for HTC Legend ? (or, how to add your own to android_winusb.inf )

Just got a HTC Legend and am very keen to get into Android development
(having previously been expirenced with eclipse/java/gwt).

However, the USB ADB driver on the SDK doesnt support it, so I
wondered how I could add it myself.

I feebly tried adding;

; HTC Legend
%SingleAdbInterface%        = USB_Install, USB\VID_0BB4&PID_0C01
%CompositeAdbInterface%     = USB_Install, USB\VID_0BB4&PID_0C97&MI_01
%SingleBootLoaderInterface% = USB_Install, USB\VID_0BB4&PID_0FFF

to the inf file. But it didnt help. (mainly because I have no clue
what I was doing)

Any help to get my Legend working as a debug device would be most
appriciated! :)

-- 

2. HELP: foursquare & pasar malam

Sent from my Spicadroid
Powered by AXIS

-- 
"Indonesian Android Community [id-android]" 

3. N1 on CM-5.0.7.1 Force Reboot.

4. Our Android Google AdSense Account Disabled due to 'modifying the ad behavior'

5. New to android. Listview problem

6. How to go back from 2.2 to 2.1update (ERE27) on nexus one

7. official twitter app source