安卓四大组件--service

一.Service
1.onCreate

onCreate()方法只会在Service第一次被创建的时候调用,如果当前Service已经被创建过了,即使再次调用该服务,也不会执行onCreate()方法

2.onStartCommand

只有当通过上下文Context执行服务才会运行该方法,该方法一旦启动,如果不执行stopService()方法的话,该服务一旦启动,就会一直运行下去,与activity的生命周期无关

3.onStart

在安卓2.0以下时默认使用,在安卓2.0以上时官方不推荐使用onStart方法,推荐使用onStartCommand方法

onStartCommand和onStart同时存在,互不影响

4.onBind

该方法是执行bindService()方法时,当activity绑定service成功时,service的生命周期回合activity的生命周期一致,当activity结束时,对应的服务也会随之结束

5.启动service的方式

一定要注意,在创建service或者activity时一定要先在配置文件中进行注册

有两种方式去启动service

(1).通过上下文Context的方式去启动service

Intent startIntent = new Intent(this,TestService2.clss);
startService(startIntent);

(2).通过跟activity绑定启动service

    //在service中写一个公开的内部类,暴露为接口,供service和activity之间进行通讯,继承Binder接口
    public class MyBinder extends Binder{
        public void doSomething(){
            Log.d(TAG, "doSomething: service与activity之间的通信");
        }
    }

    //之后在service的onBind方法中将创建的类对象进行返回
    public IBinder onBind(Intent intent) {
        Log.d(TAG, "onBind: 执行该服务的onBind");
        return myBinder;
    }
    //与service之间进行通信
    //在activity中创建对象
    ServiceConnection serviceConnection = new ServiceConnection() {
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            //IBinder是在service自己创建的类接口,要想执行里边的方法,需要将该变量进行强制类型转换
            TestService.MyBinder myBinder = (TestService.MyBinder)service;
            myBinder.doSomething();
            Log.d(TAG, "onServiceConnected: "+service);
        }
        @Override
        public void onServiceDisconnected(ComponentName name) {
            Log.d(TAG, "onServiceDisconnected: "+name);
        }
    };
//启动方式
//绑定服务

//TestActivity.this是要绑定的activity,TestService是绑定的服务(service)
Intent bindIntent = new Intent(TestActivity.this, TestService.class);

//serviceConnection是进行通信的对象,BIND_AUTO_CREATE是一个常量
bindService(bindIntent,serviceConnection,BIND_AUTO_CREATE);

两种启动方式的区别

(1).第一种启动方式

*生命周期

onCreate()->onStartCommand()(onstart()方法在2.0以上时已经弃用)->onDestroy()

*特点

只有第一次开启服务时才会去去执行service中的onCreate()方法,后边再次开启服务,不会去执行onCreate()方法,而是会调用service的onStart()和onStartCommand()方法,服务停止的时候调用onDestory(),服务只会被停止一次,服务是否运行,与启动服务的对象没有关系,启动服务的进程结束,服务也可以一直运行

(2).第二种启动方式

*生命周期

onCreate()->onBind()->onunBind()->onDestory()

*特点

通过该中方式启动service,会执行service中的onBind()方法,不会执行service中的onStart()方法和onStartCommand()方法,这种方式启动的服务与调用服务的组件是绑定在一起的,调用服务的组件线程结束,服务也会跟着结束,调用该服务的组件,可以跟调用的服务进行通信,调用服务中的方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值