Android开发07_Service服务

来源:互联网 发布:java自然语言处理 pdf 编辑:程序博客网 时间:2024/05/17 17:18

一、前言

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@Overridepublic 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
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 window10视频有回音怎么办 电脑麦克风有回音怎么办 win10话筒声音小怎么办 手机直播有回音怎么办 手机直播有回声怎么办 耳朵突然有回音怎么办 憋气耳膜不鼓怎么办 tt语音有回音怎么办? 无线话筒有回音怎么办 话筒发出刺耳声怎么办 刺激战场有回音怎么办 电脑音乐没有声音怎么办 额头小头发多怎么办 开瑜伽馆怎么办营业执照 急用100元钱怎么办 茶壶嘴底部漏水怎么办 茶壶嘴倒水回流怎么办 篮球气嘴漏气怎么办 网红气球漏气怎么办 哺乳期积乳囊肿怎么办 玩滑板怕摔怎么办 在农村结婚化妆怎么办 年检保单丢了怎么办 Excel排序不想要怎么办 科2考不过怎么办 红米手机变卡了怎么办 公司伙食有问题怎么办 拉小提琴不看谱怎么办 匡威白鞋子泛黄怎么办 婚礼主持突然打嗝怎么办 第一次上台演讲紧张怎么办 员工工作不积极怎么办 临时牌照怎么办进京证 第一次上台跳舞紧张怎么办 不倒翁沙袋吸盘不稳怎么办? 功夫贷逾期一天怎么办 耳机戴的耳骨疼怎么办 江米棍受潮了怎么办 阴阳师手机号不用了怎么办 阴阳师手机号注销了怎么办 跆拳道不会侧空翻怎么办