Yeah, a weak reference is fair game as soon as there are no "strong"
references to the object.  A soft reference is kept until it's "aged"
a little.  Different platforms have different algorithms for "aging
out" soft references, but the idea is to let them persist for a few GC
cycles at least.

On Jul 24, 4:56 pm, Agus <agus.sant...@gmail.com> wrote:
> GC can reclaim WeakReference even memory is still plenty, but
> SoftReferences will only be cleared when the system is just about to
> starve out of memory..
>
> On Sat, Jul 24, 2010 at 2:25 PM, Joseph Earl <joseph.w.e...@gmail.com> wrote:
> > I did say '(although I would use SoftReference for the purpose
> > described here).' But it wasn't clear enough I agree (and because I
> > admittedly wasn't sure enough about the differences)
>
> > On Jul 23, 4:25 pm, Matt Quigley <matthew.quig...@gmail.com> wrote:
> >> On Jul 23, 2:37 am, Indicator Veritatis <mej1...@yahoo.com> wrote:
>
> >> > You left out something very important: the code hidden under "//
> >> > reload the image" must not assume that it is not itself interrupted by
> >> > yet another call to the garbage collector. That is, instead of simply
> >> > continuing to use the soft/weak reference, it should make a strong
> >> > reference to the same object, allowing this latter reference to either
> >> > go out of scope or be set to null when it is done.
>
> >> You are referring to the code that Joseph Earl wrote above.  That code
> >> snippet is NOT a proper way to use weak references; that cache should
> >> be using soft references.
>
> >> On the other hand, in the example blog post referred to by the OP,
> >> which uses weak references, that IS a proper way to use weak
> >> references.  The main Activity already has a strong reference to the
> >> objects.  The secondary thread does not need to create a strong
> >> reference; in fact, that would make the weak reference useless.
>
> >> > But if we are making this strong reference, what was the point of
> >> > using the weak/soft reference in the first place? Ah, that is the
> >> > tricky thing about using them. Depending on when you can make and
> >> > release the strong reference, they might not buy you much; they might
> >> > not buy you anything at all. That is why they are not recommended for
> >> > much outside of caches and normalized mappings.
>
> >> You are referring to a soft reference, not a weak reference.  Soft
> >> references are good for caches.  Weak references are definitely
> >> recommended for the idea given in the article, where the main thread
> >> has a strong reference, and the background thread has a weak
> >> reference.  That way if the main thread is killed (i.e. the app is
> >> finished), if the background thread is still running then it won't
> >> prevent the weakly referenced objects from being destroyed.
>
> >> I also hate to throw this bit of information into the mix, but it
> >> should be known that Android will kill your process, and hence
> >> background threads anyways, when all your main threads have been
> >> destroyed (i.e. all your activities are finished, and there aren't any
> >> services running).  This means that, even if you did have a background
> >> thread running, it would be killed, implying that weak references
> >> wouldn't help because everything is going to get killed anyways.  That
> >> being said, there are still circumstances where the weak references
> >> matter: just because one activity is finished, doesn't mean all of
> >> your app's activities are necessarily finished.  So it would be good
> >> if you went from your main activity into another sub-activity which
> >> began a download.  But then the user presses back, because they don't
> >> want to bother waiting on the download.  In that case your main
> >> activity is still alive, but the background thread is working on the
> >> sub-activity that was already finished.  If that background thread had
> >> weak references, then that background thread would no longer be
> >> holding on to the resources of the sub-activity with strong
> >> references, and the system could GC those resources already, before
> >> the background thread dies.
>
> >> -Matt
>
> >> -Matt
>
> > --
> > 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

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

Reply via email to