【Android 初学】12、Service

1、Service的使用
  1. 定义一个类(例如 EchoService),继承Service (android.app.Service)
  2. AndroidManifest.xml当中注册该service,例如 <service android:name="EchoService"></service>
  3. 声明一个Intent:Intent serviceIntent = new Intent(Mainactivity.this,EchoService.class);
  4. 启动Service:startService(serviceIntent);
  5. 关闭Service:stopService(serviceIntent);
2、Service的生命周期
执行startService()方法之后会调用以下3个方法:
  1. 创建Service:onCreate()
  2. onStartCommand()
  3. onStart()
执行stopService()方法之后会调用一下这个方法:
  1. 销毁Service:onDestroy()
服务创建之后,被销毁之前,只会调用第一次的onCreate。在服务运行期间,再次运行 startService,将不会执行onCreate方法,而是执行 onStartCommand()、 onStart()这两个方法。

3、绑定服务
  1. 绑定:bindService(serviceIntent,this,Context.BIND_AUTO_CREATE);
    1. BIND_AUTO_CREATE:表示,如果要绑定的服务尚未开启,则自动创建该服务。
    2. 多次执行bindService方法,则只会调用一次onBind()方法,多次调用onServiceConnected()方法

  2. 解除绑定:unbindService(this);
                       1. 将调用onunBind()方法。
                       2. 再调用onDestroy()方法。
             不能多次执行多次解除绑定unbindService()方法,否则应用程序将报错。

以上的方法中的参数this,指的是一个类实现了 ServiceConnection接口,这里是MainAcitivty实现了。
并复写接口的方法public void onServiceConnected(ComponentName name, IBinder service)以及
        public void onServiceDisconnected(ComponentName name)方法。

一帮情况下,写程序时,需要绑定Service时绑定,执行完方法之后,解除绑定。并且在Activity的onDestroy方法里,try一下 解除绑定:unbindService(this);

    3.    执行bindService方法,绑定后会先执行onCreate()方法,执行EchoService的 onBind方法,使其返回一个 Binder子类的实例。

    4.    通过在   onServiceConnected中拿到的 Binder实例对象,因为Binder是Service的内部类,可以调用到服务内的各种方法,于是Activity里面也可以进行各种操作。

     5.    当执行unbindService()解除绑定时,会调用Service的onunBind()方法,再调用onDestroy();

备注:
如果是通过startService启动的服务,他是不会因为Activity的销毁而销毁,但是通过BindService启动的服务会因此销毁。
只有通过stopService来销毁。不能通过UnbindService(这样会程序崩溃,因为服务并未绑定)
通过bindService绑定服务,会自动执行startService方法。并且不能通过stopService停止。
可以使用unbindService停止,也可以直接退出调用该Service的Activity而强迫停止服务。(会报错)

为了既能使用bindService的服务,又要退出Acitivty后服务依旧停留在手机里,可以这样
1、先执行startService(),启动服务
2、再执行bindService(0,绑定服务
3、使用服务
4、解除服务

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值