现在的位置: 首页 > 综合 > 正文

APIDemo Service(二)

2013年01月25日 ⁄ 综合 ⁄ 共 1890字 ⁄ 字号 评论关闭

此文原创,转载请标明网址:http://blog.csdn.net/buyi006/archive/2011/04/28/6369002.aspx

下面我们就来讲讲LocalService,在讲之前贴张service的状态图

由此图可清楚看到service各生命周期方法的调用时机,不解释。

请看LocalServiceActivities类中的Controller和Binding类,它已经说明了service的两种使用方法。

 


startService(new Intent(Controller.this, LocalService.class));

 

stopService(new Intent(Controller.this, LocalService.class));

 

 

写好指向service的intent然后调用startService和stopService就可以完成对service的打开和关闭。你可以在service做你想做的事情,到现在controller的方法已经全部揭晓,接下来是binding的方法,这个就有点复杂。

继续看:

 

bindService(new Intent(Binding.this, LocalService.class), mConnection, Context.BIND_AUTO_CREATE);

与service绑定需要三个参数,一个intent去指向目的service,一个ServiceConnection对象,这个对象是用户与service连接的桥梁,还有一个参数是一个flag,这个先用系统默认的。

connection顾名思义得双方做好连接的准备,所以调用方和service都必须有相关代码

1.service

自定义一个Binder对象

private final IBinder mBinder = new LocalBinder();

 

public class LocalBinder extends Binder {

        LocalService getService() {

            return LocalService.this;

        }

    }

覆盖onBind方法,返回一个Binder对象

 

  public IBinder onBind(Intent intent) {

        return mBinder;

    }

2.调用方

 

private ServiceConnection mConnection = new ServiceConnection() {

            public void onServiceConnected(ComponentName className, IBinder service) {            

                mBoundService = ((LocalService.LocalBinder)service).getService();             

             }

 

            public void onServiceDisconnected(ComponentName className) {             

                mBoundService = null;

                Toast.makeText(Binding.this, R.string.local_service_disconnected,

                        Toast.LENGTH_SHORT).show();

            }

        };

 

 

 

 

 

通过一个连接拿到service对象,然后通过该service做一些自定义的事情。

至此Binding也说完了。

但其中还有一些细节没有处理:

1.譬如如果同时使用biding和start,哪个优先级高。其实不存在优先级之说,调用onStartCommand和onBind方法都会遵循一个原则,就是如果该service已经创建的话,则不会去调用onCreate方法,然后走各自的生命周期路线。例如先startService的话再bindservice,则因startService已经创建了service,所以直接走onBind方法。反之亦然。

2.这个IBinder究竟是何方神仙,这个说起来就有点复杂。且留待下一节解释吧~

 

回顾,这一节系统介绍了service start和bind的用法,所有示例代码如上。

下一节将说说我对IBinder的理解,敬请期待。

此文原创,转载请标明网址:http://blog.csdn.net/buyi006/archive/2011/04/28/6369002.aspx

 

抱歉!评论已关闭.