Thanks for the WeakReference tip! that resolved static callback
function issues....

Its good to know about processes.  In my case I need to make my
service as open as possible.  I want other applications to be able to
use it.
If you do think there is a good guide on sharing a service among apps
please let me know :)

Thanks for your help!
-Jona


On Mar 9, 11:37 pm, Dianne Hackborn <[email protected]> wrote:
> A lot of people don't run into this because they don't work with services
> running in other processes.  As a high level thing, I don't know what your
> application is doing, but there are very few cases where you need to have
> the service in a different process so if appropriate you might want to
> consider just not doing that.  Keeping everything in the same process is
> going to make your code 10x simpler since you can take a lot of shortcuts --
> see the local service examples in ApiDemos.
>
>
>
> On Tue, Mar 9, 2010 at 7:54 PM, Moto <[email protected]> wrote:
> > OK!
>
> > So I used DDMS to capture the hprof from my leaky app using the
> > registerCallback() and also of a non leaky by not using the
> > registerCallback().  I was able to notice that my activity leaked it's
> > context at every rotation. "Not too familiar with MAT ^.^"
>
> > I tested just calling unregisterCallback() without ever calling
> > registerCallback() and my app would leak!
>
> > In short as I came to post that I ran upon Dianne's post and well it
> > somewhat resolved the issue!  That was to make my callback function
> > static!  So how is everybody else not running into this issue!?  I'm
> > not doing something out of the ordinary according to the Android
> > samples...
>
> > So now I got to figure out how to call from those static functions...
> > I'm one step closer!
>
> > Thanks everyone!
>
> > On Mar 9, 9:32 pm, Dianne Hackborn <[email protected]> wrote:
> > > Keep in mind that if you are giving a reference to one of your objects to
> > > another process, the lifetime of that object is at the mercy of the other
> > > process (via the remote reference it holds on to it while it is using
> > it).
> > >  In particular, at the java level, the reference won't be released until
> > the
> > > other process does a GC.  For that reason, if your callback holds on to a
> > > significant amount of state (like an activity), you might want to
> > consider
> > > using a WeakReference to hold the object the callback works with (and of
> > > course make sure the callback is a separate class or static inner class).
> > >  This will allow your big object to be GCed even if the callback is still
> > > around.
>
> > > On Mon, Mar 8, 2010 at 3:31 PM, Moto <[email protected]> wrote:
> > > > Mark,
>
> > > > Yes, I'm using:
> > > > final RemoteCallbackList<IRemoteServiceCallback> mCallbacks
> > > >            = new RemoteCallbackList<IRemoteServiceCallback>();
>
> > > > to register my callback.  But I'm sure that RemoteCallbackList is not
> > > > the issue since I completely removed the register and unregister calls
> > > > and still have the leak issue.  So somehow one of the idls is leaking?
> > > > Thanks for your help!
>
> > > > // ====================================================
> > > >                // registerCallback(IRemoteServiceCallback)
> > > >                // Info: Register callback
> > > >                // ====================================================
> > > >                 public void registerCallback(IRemoteServiceCallback cb)
> > {
> > > >                        if (cb != null) {
> > > >                        //      mCallbacks.register(cb);
> > > >                        }
> > > >                }
>
> > > >                 // ====================================================
> > > >                // unregisterCallback(IRemoteServiceCallback)
> > > >                // Info: Unregister callback
> > > >                // ====================================================
> > > >                 public void unregisterCallback(IRemoteServiceCallback
> > cb) {
> > > >                        if (cb != null) {
> > > >                        //      mCallbacks.unregister(cb);
> > > >                        }
> > > >                }
>
> > > > On Mar 7, 9:44 pm, Mark Murphy <[email protected]> wrote:
> > > > > Moto wrote:
> > > > > > I start the service at onStart() and stop it at onStop()
>
> > > > > > // This is how I connect
> > > > > > // Start Service
> > > > > > this.startService(i);
>
> > > > > > // connect to service
> > > > > > this.bindService( i, this, Context.BIND_AUTO_CREATE);
>
> > > > > You do not need to call both startService() and bindService(). The
> > > > > Context.BIND_AUTO_CREATE parameter will cause the service to be
> > started
> > > > > if it is not already started.
>
> > > > > With respect to your leak, if you are convinced the problem relates
> > to
> > > > > the callback registration, you can use logging or breakpoints to
> > confirm
> > > > > that your code is actually getting called when you think it is, and
> > that
> > > > > the RemoteCallbackList (which is what I'm assuming you're using) is
> > > > > cleanly getting emptied when you unregister.
>
> > > > > --
> > > > > Mark Murphy (a Commons Guy)http://commonsware.com|
> > > >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]<android-developers%[email protected]>
> > <android-developers%[email protected]<android-developers%[email protected]>
>
> > > > For more options, visit this group at
> > > >http://groups.google.com/group/android-developers?hl=en
>
> > > --
> > > Dianne Hackborn
> > > Android framework engineer
> > > [email protected]
>
> > > Note: please don't send private questions to me, as I don't have time to
> > > provide private support, and so won't reply to such e-mails.  All such
> > > questions should be posted on public forums, where I and others can see
> > and
> > > answer them.
>
> > --
> > 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]<android-developers%[email protected]>
> > For more options, visit this group at
> >http://groups.google.com/group/android-developers?hl=en
>
> --
> Dianne Hackborn
> Android framework engineer
> [email protected]
>
> Note: please don't send private questions to me, as I don't have time to
> provide private support, and so won't reply to such e-mails.  All such
> questions should be posted on public forums, where I and others can see and
> answer them.

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