Android开发07_Service服务

一、前言

Service是Android四大组件之一,多用于服务,像微信这种永远杀不死的后台进程据说就是用Service做的,此话并不是说Service杀不死,而是每当你启动了微信,微信的就会在后台启动两个Service,一个负责做功能,另一个负责唤醒功能的Service,当你手动去杀微信微信进程时,即使负责功能的Service被杀死了,负责唤醒的Service就会重新唤醒负责功能的Service,所以给我们展示的效果就是微信进程永远杀不死的神奇现象。

有些码农可能认为Activity不可以做这些事情吗?为什么飞到Service来做,这就要牵涉到Service的特点,它和Activity最大的区别就是Activity有界面,二Service没有,所以它是可以运行于后台的。



二、自定义Service使用

1、自定义Service,继承Service,当然Service也有自己的生命周期,类似于Activity,因为Service是在后台运行的,所以它的生命周期相对来说没那么重要,只需理解掌即可。


2、需要在manifests中去注册,我们说过manifests中可以注册四大组件的任意一个,有些是必须要注册的,有些事非必需的,理解记忆

<!-- 注册Service -->
<service android:name=".MyService" />

3、启动Service:这里类比Activity的跳转,Service的启动也分显示启动和隐式启动

显示启动:

Intent intent = new Intent();
intent.setClass(this, MyService.class);
startService(intent);

隐式启动:

<!-- 注册Service -->
<service android:name=".MyService">
    <action android:name="qd" />
</service>

4、绑定服务:Service的绑定是通过ServiceConnection对象绑定的,由于ServiceConnection本身是个接口类,初始化ServiceConnection对象需要重写两个抽象方法:onServiceConnected和onServiceDisConnected,分别在建立连接和断开连接时调用

/**
 * 绑定服务
 */
public void btn03(View v) {

    Intent intent = new Intent(this, MyService.class);
    bindService(intent, serviceConnection, BIND_AUTO_CREATE);//绑定服务
    Log.e("TAL", "1>>>" + myIBinder);
}

/**
 * ServiceConnection
 */
public ServiceConnection serviceConnection = new ServiceConnection() {

    @Override
    public void onServiceConnected(ComponentName name, IBinder service) {
        //建立连接
        myIBinder = (MyService.MyIBinder) service;
        Log.e("TAL", "2>>>" + myIBinder);

    }

    @Override
    public void onServiceDisconnected(ComponentName name) {
        //断开连接

    }
};

5、在绑定服务成功后,如果想要通过Activity来调取Service类里的方法,需要在Service中新建一个Binder对象,并在Service的OnBind方法中返回此对象,那么在Activity的ServiceConnection中就可以对onServiceConnected的IBinder对象全局赋值并使用了

/**
 * 自定义IBinder
 * <p>
 * # 1 实现IBinder
 * <p>
 * # 2 继承Binder
 */
public class MyIBinder extends Binder {

}
@Nullable
@Override
public IBinder onBind(Intent intent) {
    Log.e("TAL", "onBind");
    return new MyIBinder();
}


6、服务也可销毁

/**
 * 关闭服务
 */
public void btn02(View v) {
    stopService(new Intent(this, MyService.class));
}

三、总结

1、服务一般用于做不需要界面展示的工作,比如短信拦截、音乐播放器后台播放

2、服务不和Activity同生共死,一般在Activity的finish的方法中调用stopService即可做到在关闭Activity的时候关闭服务


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值