to dear Dianne,

I see your point. However, when I try to bind the service without
BIND_AUTO_CREATE flag, I expect it will return false to me. But the
bindService method always returns true. This is a weird behavior for
bindService with a flag 0.

the code I used is following:
isBound = bindService(new Intent(IRemoteService.class.getName()),
mConnection, 0);

According to the document, this should return false while the service
is not running or started, but I got true even if the emulator and
the controller activity starts freshly. Does bindService return true
when "there is a service registered" rather than "there is a service
started"?

I think I would agree with your point, this could be efficient and
safety (since I don't need to expose the full class name for query in
the RunningServiceInfo list), but I need a little more help in solving
bindService problem. ;-)

Best regards,
Nicholas

On 1月6日, 下午5時42分, "Dianne Hackborn" <hack...@android.com> wrote:
> To monitor the state of a service, I suggest binding to it without the flag
> to create it.  Then you will not cause it to start, but be told when it is
> created or destroyed via the appropriate callbacks.
>
>
>
> On Tue, Jan 6, 2009 at 1:24 AM, yukinoba <ckmagic...@gmail.com> wrote:
>
> > to dear Dianne,
>
> > I need to implement a remote background service and a service
> > controller activity. I want to present an effect which the controller
> > activity could know whether or not this service is already started,
> > and enable / disable the menu button which is used to start / bind /
> > unbind / stop the service.
>
> > However, the controller activity may be paused, or destoryed. I have
> > tried to write the status in a global variable, and with the activity
> > destoryed, the variable value lost. I also tried to write into a
> > SharedPreference, however, this will be persistent even the emulator
> > shuts down. In the later case, the preference status will mislead the
> > controller activity when the system is up next time.
>
> > So, I need a way to know whether a specified background service is
> > launched or not even if the controller activity is destroyed and back
> > then. :-)
>
> > Best regards,
> > Nicholas
>
> > On 1月6日, 下午3時40分, "Dianne Hackborn" <hack...@android.com> wrote:
> > > I would strongly recommend against that, it can be quite inefficient.
> >  This
> > > API is really intended for applications to display a list of running
> > > services.
>
> > > If your service is running in the same process as the code wanting to
> > check
> > > its state, you can just set a global variable while it is running.
>
> > > Why do you need to do this?
>
> > > On Mon, Jan 5, 2009 at 10:34 PM, yukinoba <ckmagic...@gmail.com> wrote:
>
> > > > Hi all,
>
> > > > I have already found out how to get this done. Please refer to the
> > > > following code:
>
> > > >    /**
> > > >     * Indicates whether the specified service is already started.
> > > > This
> > > >     * method queries the activity manager for launched services that
> > > > can
> > > >     * respond to an binding with an specific service name.
> > > >     * If no existed service is found, this method returns null.
> > > >     *
> > > >     * @param context The context of the activity
> > > >     * @param className The service full name to check for
> > > > availability.
> > > >     *
> > > >     * @return ComponentName if the service is already existed, NULL
> > > > otherwise.
> > > >     */
> > > >    public static ComponentName isServiceExisted(Context context,
> > > > String className)
> > > >    {
> > > >        ActivityManager activityManager =
> > > >                (ActivityManager)
> > > > context.getSystemService(ACTIVITY_SERVICE);
>
> > > >        List<ActivityManager.RunningServiceInfo> serviceList
> > > >        = activityManager.getRunningServices(Integer.MAX_VALUE);
>
> > > >        if(!(serviceList.size() > 0))
> > > >        {
> > > >                return null;
> > > >        }
>
> > > >        for(int i = 0; i < serviceList.size(); i++)
> > > >        {
> > > >                RunningServiceInfo serviceInfo = serviceList.get(i);
> > > >                ComponentName serviceName = serviceInfo.service;
>
> > > >                if(serviceName.getClassName().equals(className))
> > > >                {
> > > >                        return serviceName;
> > > >                }
> > > >        }
>
> > > >        return null;
> > > >    }
>
> > > > Best regards,
> > > > Nicholas
>
> > > > On 1月6日, 上午10時58分, yukinoba <ckmagic...@gmail.com> wrote:
> > > > > Ummm... does anyone know? have any ideas?
>
> > > > > On 1月5日, 下午12時05分, yukinoba <ckmagic...@gmail.com> wrote:
>
> > > > > > To dear all Android developers,
>
> > > > > > Is there a way to check whether a service is already started or
> > not?
> > > > > > This issue has been discussed ealier (and much earlier) in April,
> > in
> > > > > > the last year, on this forum.
>
> >http://groups.google.com/group/android-developers/browse_thread/threa.
> > > > ..
>
> > > > > > However, I wonder that does there have a new solution to this issue
> > > > > > rather than using a SharedPreferences to store the service status.
> > Is
> > > > > > this functionality to check service is started or not has been
> > added
> > > > > > to SDK1.0_r2 or Cupcake branch?
>
> > > > > > Thanks for any help or solutions! :-)
>
> > > > > > Best regards,
> > > > > > Nicholas
>
> > > --
> > > Dianne Hackborn
> > > Android framework engineer
> > > hack...@android.com
>
> > > Note: please don't send private questions to me, as I don't have time to
> > > provide private support.  All such questions should be posted on public
> > > forums, where I and others can see and answer them.
>
> --
> Dianne Hackborn
> Android framework engineer
> hack...@android.com
>
> Note: please don't send private questions to me, as I don't have time to
> provide private support.  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 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