I have plenty of these types of constructs in my code and I've never ever 
seen static variables becoming un-initialized. The only times they are 
uninitialized is when the process (DalvikVM) has been killed and restarted. 

Are you sure that the code in your onDestroy (or some other life-cycle 
callback) doesn't un-initialize these static variables? Or, if these static 
variables are public, that some other code un-initializes them?


On Thursday, May 3, 2012 12:40:19 PM UTC-4, DebUggEr wrote:
>
> I think I got my bit to research further more into it! But just look at 
> this one final argument.
>
> I am not telling the solution in my above mentioned post is correct. But 
> the only solution that ensured that my static data was consistent was to 
> convert it from static data to an object of Application class. (The 
> solution that is mentioned in the blog post). Consider this scenario
>
> 1) Activity A(SingleTask) launches Activity B
> 2) Activity B uses static Data containing boolean, int and arraylist.
> 3) send it to background, and return after 45 mins. Returned to Activity A 
> . 
> 4) Check static Data. int initialized to garbage. Boolean to false. 
> arraylist to null.
>
> No, the application wasn't killed or restarted, my logs also show the 
> PID(dosen't change). I am performing absolutely nothing when the app is in 
> background so I am giving android no reason to clear memory or close 
> activity.
>
> Convert static data to a object of application class and no logical change 
> at all(I did a Tit for Tat). This issue is fixed. 
>
> If you think this bit I mentioned is impossible just direct me to 
> a resource/book that makes me design more definite tests to prove this or 
> gives me an insight to static data handling inside the DVM, JVM etc. It 
> cant be possible Mobile OS that has cases of sleep, hibernate, lock and low 
> memory conditions will just make sure that static data stays there. Even if 
> the application is marked as always running.
>
> Appreciate your time.
>
> On Thursday, 3 May 2012 16:02:37 UTC+5, Mark Murphy (a Commons Guy) wrote:
>>
>> AFAIK, the quoted passage is mostly incorrect. Classes are not 
>> unloaded once loaded. 
>>
>> There can be issues with static data members if you use multiple 
>> ClassLoaders -- AFAIK, you get the same effect in traditional Java. 
>> However, you should only encounter that when you create your own 
>> ClassLoader for one reason or another. And, of course, when the 
>> process goes away, static data members go away, but so do custom 
>> Application subclasses. 
>>
>> If you examine the Android frameworks' source code, it is littered 
>> with static data members. Furthermore, based on a quick survey, only 
>> about half of the AOSP apps have a custom Application subclass, and 
>> half of those simply use it to initialize static data members. 
>>
>> On Thu, May 3, 2012 at 2:01 AM, DebUggEr <[email protected]> 
>> wrote: 
>> > I have been testing and experimenting with android low end devices and 
>> > trying to find a consistent solution for singletons in android. I 
>> beleive I 
>> > have gone through most posts addressing this issue and I am pretty sure 
>> that 
>> > I have a good solution. 
>> > 
>> > 
>> http://www.devahead.com/blog/2011/06/extending-the-android-application-class-and-dealing-with-singleton/
>>  
>> > 
>> > " I found that sometimes some static variables bound to activities 
>> happened 
>> > to be uninitialized even though they’ve previously been initialized! I 
>> > thought that when a static variable is initialized it stays so for the 
>> > entire life of the application, but this doesn’t seem to be the case. 
>> Among 
>> > all the information I found on the web, I tried to find out a safe and 
>> > reliable way to initialize static variables (and you know that the 
>> singleton 
>> > design pattern requires the use of a static variable). The explanation 
>> of 
>> > the weird behavior I saw that makes more sense to me is that the static 
>> > variables instances are bound to the class loader of the class that 
>> first 
>> > initialized them. So what does this mean? This means that if a static 
>> > variable inside any class has been initialized by an activity, when 
>> that 
>> > activity is destroyed also its class might be unloaded and so the 
>> variable 
>> > becomes uninitialized again! While if the variable is initialized by 
>> the 
>> > application class, it’s life is the same as the application process so 
>> we’re 
>> > sure that it will never become uninitialized again. That’s why I chose 
>> to 
>> > initialize all the singletons in the MyApplication class." 
>> > 
>> > I want experts to look into this and confirm that this dosent has any 
>> > serious drawbacks. I am opposing this solution as previously discussed 
>> in 
>> > this same group 
>> > "
>> https://groups.google.com/forum/?fromgroups#!topic/android-developers/2i82mjoM46M/overview";
>>  
>>
>> > 
>> > Anxious. 
>> > 
>> > -- 
>> > 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 
>>
>>
>>
>> -- 
>> Mark Murphy (a Commons Guy) 
>> http://commonsware.com | http://github.com/commonsguy 
>> http://commonsware.com/blog | http://twitter.com/commonsguy 
>>
>> Android Training...At Your Office: http://commonsware.com/training 
>>
>

-- 
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

Reply via email to